Voici ma petite contrib au multilinguisme.
Contrairement aux autres essais qui gérent une langue par secteur,
j’ai choisi d’utiliser les critères de langue au niveau de chaque article.
La rubrique a la langue par défaut du site.
Dans chaque rubrique se trouve x articles, chacun avec sa langue, certains pouvant être la traduction d’autres.
exemple d’arborescence.
sommaire
|- rub1
|- art1 fr
|- art2 en traduction de art1
|- art3 de
|- rub2
|- art4 fr
|- art5 en traduction de art4
Dans ce type d’arborescence, il faut pouvoir afficher seulement le nécessaire.
J’ai donc choisi de permettre à l’internaute de choisir la langue de navigation a tout moment avec
#MENU_LANG
J’ai ajouté dans le fichier ecrire/mes_options.php3 le paramètre $forcer_lang=true
La boucle permettant de lister les articles doit donc permettre :
1) d’afficher en priorité les articles dans la langue choisie par #MENU_LANG
2) d’afficher les autres articles ne possédant pas de traduction dans la langue choisie (par défaut l’article d’origine).
3) Eventuellement d’afficher une liste des traductions disponibles
Après divers essais, je suis arrivé à la boucle suivante :
<!-- AFFICHE LES ARTICLES RECENTS DANS LA LANGUE DE L'UTILISATEUR -->
<BOUCLE_articles_recents(ARTICLES){id_rubrique}{par titre}{lang?}{doublons}>
<BOUCLE_elim_trad(ARTICLES) {traduction} {doublons}>
</BOUCLE_elim_trad>
<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>[(#TITRE|supprimer_numero)]</a></h2>
<div class="detail">
[(#DATE|nom_jour)] [(#DATE|affdate)]
<B_auteurs_recents><:par_auteur:> <BOUCLE_auteurs_recents(AUTEURS){id_article} {", "}>#NOM</BOUCLE_auteurs_recents>
</div>
<br>
</BOUCLE_articles_recents>
<h2><multi>[en]Other langages[fr]Autres langues</multi></h2>
<!-- AFFICHE LES ARTICLES RECENTS DANS LES AUTRES LANGUES -->
<!-- AFFICHE DE PREFERENCE L'ARTICLE D'ORIGINE -->
<BOUCLE_articles_recents2(ARTICLES){id_rubrique}{par lang}{par titre}{doublons}>
<BOUCLE_tester_traduction(ARTICLES){id_article}{traduction}>
<BOUCLE_traduit(ARTICLES){id_article}{origine_traduction}>
</BOUCLE_traduit>
<BOUCLE_auteur_origine(ARTICLES){traduction}{origine_traduction}>
<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>[(#TITRE|supprimer_numero)] <font size="2">#LANG</font></a>
<BOUCLE_articles_autrelangue(ARTICLES) {traduction} {exclus} {"|"}>
<font size="2"><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>[(#LANG)]</a></font>
</BOUCLE_articles_autrelangue>
</h2>
<div class="detail">
[(#DATE|nom_jour)] [(#DATE|affdate)]
<B_auteurs_recents2><:par_auteur:><BOUCLE_auteurs_recents2(AUTEURS){id_article} {", "}>#NOM</BOUCLE_auteurs_recents2>
</div>
<br>
</BOUCLE_auteur_origine>
<//B_traduit>
</BOUCLE_tester_traduction>
<h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>[(#TITRE|supprimer_numero)]</a></h2>
<div class="detail">
[(#DATE|nom_jour)] [(#DATE|affdate)]
<B_auteurs_recents3><:par_auteur:><BOUCLE_auteurs_recents3(AUTEURS){id_article} {", "}>#NOM</BOUCLE_auteurs_recents3>
</div>
<br>
<//B_tester_traduction>
</BOUCLE_articles_recents2>
Problème rencontré :
La boucle précédente marche bien sauf lorsque l’un des articles a une traduction en cours de rédaction.
Dans ce cas, l’article d’origine ne s’affiche plus si le visiteur navigue dans la langue de l’article en cours de rédaction.
si vous avez une idée, n’hésitez pas a laisser un message...
@+ COYOTE