Carnet Wiki

JeComprendRienAuMultilinguisme

Version 5 — September 2018 Jacques

Mortimer: Voici une discussion sur comment mettre en place une page Sommaire quand on a un site divisé en plusieurs secteurs de langue. Voir le Thread original, qui s’est un peu éparpillé.

message de Jean Philippe Benadjer:
bonjour,

je lis depuis ce matin tout ce qui a été dit sur le multilinguisme, les liens fournis et tout et tout (notamment raforum, wikini... ) mais je dois avouer que je ne comprend tj pas comment faire concretement un site multilingue...

j’ai opté pour la solution 1 langue = 1 secteur, j’ai créé mes rubriques...

mais comment faire ne serait-ce qu’un menu (liste de rubriques) affichant que les rubriques d’une langue?
comment lier le parametre lang avec les secteurs?
d’ailleurs, quoi faire de ce parametre lang?

j’avoue ne pas saisir comment tout çà fonctionne...

Pierre Andrews a écrit :

Hello,

Si j’ai bien compris, il faut afficher soit le premier article de la 1ère sous rubrique du secteur français, soit du secteur anglais.

1) Tu as donc un site séparé en secteurs de langue. Je pense donc que $forcer_lang=true est inutile. La langue est directement choisie par l’utilisateur quand il choisit le secteur où il navigue. Il n’y a donc pas à passer la langue choisie par #MENU_LANG dans l’url, puisque la langue est “induite” par le secteur où l’utilisateur se trouve.

Evidemment, pour le sommaire, l’utilisateur ne se trouve pas encore dans un secteur. Si tu veux qu’il fasse le choix de langue à travers le menu de langue sur cette page, alors mets $forcer_lang=true; dans sommaire.php3 avant le include. Et #MENU_LANG quelque part sur la page.
(Mais en général, le sommaire offre juste un choix de langue (comme sur spip.net) et la page principale est en fait la page rubrique
pour les rubriques de niveau 1)

2) Il y a donc un seul secteur français, un seul secteur anglais, puis des sous rubriques. La première chose à faire est donc de choisir le bon secteur racine:

<BOUCLE_sect(RUBRIQUES){racine}{lang}> 

cette boucle retourne le secteur dont la langue est celle passée dans l’url (puisque on utilise $forcer_lang au moins pour le sommaire)

3) ensuite, il faut sélectionner la 1ere rubrique (on dit 1ere dans une liste des rubriques triées alphabétiquement) de ce secteur:

<BOUCLE_rub (RUBRIQUES){par titre}{id_parent}{0,1}> 

puis le premier article dans cette rubrique:

<BOUCLE_texteArt(ARTICLES){id_rubrique}{par titre}{0,1}> 

On remarque que, une fois la langue sélectionnée (par la boucle sur les secteurs), les 2 dernières boucles sont les mêmes que dans un site monolingue.

Ce qui donne pour ta boucle:

_ <BOUCLE_sect(RUBRIQUES){racine}{lang}> 
_ <BOUCLE_rub (RUBRIQUES){id_parent}{par titre}{0,1}>


<div id="leftcontainer"> 
_ [(#LOGO_RUBRIQUE||logo0)] 
_ </div>


<div id="rightcontainer">


<BOUCLE_texteArt(ARTICLES){id_rubrique}{par titre}{0,1}> 
_ <h1> [(#TITRE|supprimer_numero)]</h1> 
_ <p> #TEXTE</p> 
_ </BOUCLE_texteArt> 
_ </div>


</BOUCLE_rub> 
_ </BOUCLE_sect> 

La subtilité dans un site multilingue, c’est qu’il faut un moyen de limiter les boucles aux contenus de la langue voulue. Il faut donc spécifier cette langue d’une façon où d’une autre. Il y a alors deux politiques (qui peuvent être combinées si nescessaire qd on a bien compris ce qu’elles font):

a) la langue héritée du contexte. CAD que si on a le secteur 1 français et que l’on fait:

<BOUCLE_sect(RUBRIQUES){racine}{id_rubrique=1}> 
_ <BOUCLE_art(ARTICLES){tout}{lang}> 
_ #TITRE 
_ </BOUCLE_art> 
_ </BOUCLE_sect> 

Le critère lang de la boucle art, prendra la langue de la rubrique 1, donc du secteur français (le français quoi ;)

b) la langue passée par l’url. CAD que si on a la boucle:

<BOUCLE_art(ARTICLES){tout}{lang}> 

on ne verra que les articles de la langue donnée par ?lang=fr dans l’url. En fait, pour que cela marche, il y a 2 conditions:
-  mettre $force_lang=true dans le fichier du squelette ou dans mes_options.php3 (si on veut utiliser cela dans toute les pages du site)
-  mettre #MENU_LANG dans les squelettes pour que le visiteur puisse choisir la langue qu’il veut afficher (celle qui sera passé dans l’url).