Introduction
Cet article propose une solution pour afficher un menu de langues plat pour SPIP 2.0. Cela permet d’afficher sur l’ensemble de son site (page sommaire.html, page rubrique.html, page article.html) un menu affichant toutes les langues disponibles sur le site, sauf celle utilisée sur le moment.
Par exemple, un site a comme langue d’origine « français » et comme langue supplémentaire « English ». Lorsque le visiteur se trouve sur le site en version française, il aura la possibilité de cliquer sur un lien « English » lui permettant de visualiser le site en anglais.
Le code proposé a été réalisé par Kent1 sur le canal IRC de SPIP. Un grand merci pour sa contribution !
Contexte
Cette proposition est valable pour un site web basé sur les traductions d’articles (par le biais du menu « langue et traduction de l’article » ) et non pas par secteurs (les rubriques utiliseront la balise <multi>
).
Configuration
- Dans l’espace privé de SPIP, il faut d’abord penser à configurer correctement la gestion des langues (configuration > gestion des langues) :
- Dans l’onglet « Langue principale du site », choisir la langue principale (dans mon cas le français),
- Dans l’onglet « Multilinguisme », choisir les langues nécessaires (il peut y en avoir bien plus de 2 !),
- Toujours dans l’onglet « Multilinguisme », configurer les options comme suit :
- Activer le menu de langue sur les articles ? Oui
- Activer le menu de langue sur les rubriques ? Non
- Gérer les liens de traduction ? Oui
Comme indiqué dans le « Contexte » (lire ci-dessus), cela permettra de gérer les rubriques avec une balise<multi>
et les articles par le menu « langue et traduction de l’article ».
- L’autre étape consiste à télécharger et installer le plugin SPIP-Bonux !
- Autre plugin nécessaire, Le Couteau Suisse. Lorsque le plugin est installé et activé, veillez à activer l’option « forcer langue » !
Page sommaire.html
Voici le code à ajouter, à l’endroit que vous souhaitez voir apparaître le menu langue, pour votre page sommaire.html.
[(#REM) on boucle sur les langues disponibles dans le public grâce à spip-bonux]
[(#SET{langues,[(#CONFIG{langues_multilingue}|explode{','}|serialize)]})]
<BOUCLE_langue_possibles(POUR){tableau #GET{langues}}>
[(#ENV{lang}|=={#VALEUR}|non)<a href=" [(#URL_ACTION_AUTEUR{'converser',#VALEUR&var_lang=#VALEUR,[(#SELF|parametre_url{lang,'','&'})]})]">[(#VALEUR|traduire_nom_langue)]</a>]
</BOUCLE_langue_possibles>
D’abord, on récupère la liste des langues disponibles (sauf la langue en cours), et ensuite, on fait un lien vers l’action converser qui pose le cookie de langue et donc change la langue de l’utilisateur. Puis, on créée un lien qui redirige sur la page sommaire en cours.
Pour plus d’informations sur la balise URL_ACTION_AUTEUR
Page rubrique.html
Pour la page rubrique.html, le code est sensiblement différent. En effet, il faut englober le code précédent dans une boucle RUBRIQUES.
<BOUCLE_rub(RUBRIQUES){id_rubrique}>
[(#REM) on boucle sur les langues disponibles dans le public grâce à spip-bonux]
[(#SET{langues,[(#CONFIG{langues_multilingue}|explode{','}|serialize)]})]
<BOUCLE_langue_possibles(POUR){tableau #GET{langues}}>
[(#ENV{lang}|=={#VALEUR}|non)<a href="[(#URL_ACTION_AUTEUR{'converser',#VALEUR&var_lang=#VALEUR,[(#SELF|parametre_url{lang,'','&'})]})]">[(#VALEUR|traduire_nom_langue)]</a>]
</BOUCLE_langue_possibles>
</BOUCLE_rub>
Le principe est le même que sur la page sommaire. Sauf que la redirection se fait directement sur la page rubrique en cours.
Page article.html
C’est dans la page article que le code est le plus évolué. Le début est le même, puis on redirige soit vers l’article traduit s’il existe, soit vers l’article en cours.
<BOUCLE_menulangue(ARTICLES){id_article}>
[(#REM) un menu langue plat qui redirige vers la traduction de l'article si elle existe ... sinon sur l'article en cours mais en ayant changé de langue pour l'interface]
[(#REM) on boucle sur les langues disponibles dans le public grâce à spip-bonux]
[(#SET{langues,[(#CONFIG{langues_multilingue}|explode{','}|serialize)]})]
<BOUCLE_langue_possibles(POUR){tableau #GET{langues}}>
[(#REM) on récupère la traduction "potentielle" de l'article en cours]
<BOUCLE_article_traduit(ARTICLES){traduction}{lang=#VALEUR}>
[(#ENV{lang}|=={#VALEUR}|non)<a href="[(#URL_ACTION_AUTEUR{'converser',#VALEUR&var_lang=#VALEUR,[(#URL_ARTICLE|parametre_url{lang,'','&'})]})]">[(#VALEUR|traduire_nom_langue)]</a>]
</BOUCLE_article_traduit>
[(#REM) Si pas de traduction, on change bien la langue mais le lien reste sur la même page]
[(#ENV{lang}|=={#VALEUR}|non)<a href="[(#URL_ACTION_AUTEUR{'converser',#VALEUR&var_lang=#VALEUR,[(#URL_ARTICLE|parametre_url{lang,'','&'})]})]">[(#VALEUR|traduire_nom_langue)]</a>]
<//B_article_traduit>
</BOUCLE_langue_possibles>
</BOUCLE_menulangue>
Tout cela est bien entendu englobé dans une boucle ARTICLES.
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |