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.
Discussions par date d’activité
12 discussions
Excellente idée. Je viens de l’ajouter à mon site en construction avec le squelette median. Par contre, les liens ’français’ et ’english’ renvoient sur une page ’erreur 404’ à partir de la page sommaire.html. Une idée d’où pourrait venir le problème et comment le résoudre ? J’ai installé SPIP 2 et je découvre SPIP depuis très peu.
D’avance merci beaucoup !
Répondre à ce message
J’ai du mal à comprendre l’intérêt de cette contrib...
Il me semble que SPIP met à disposition un menu de langue qui propose automatiquement les langues utilisées sur le site, et que l’on appelle très simplement par la balise
#MENU_LANG
... À vérifier...Deuxio, je réalise chose semblable, sans plugin, sur ce site trilingue par exemple, où le code utilisé tient en une ligne, grâce au critère
{fusion}
:<BOUCLE_langues(ARTICLES){!par lang}{" | "}{fusion lang}><a href="[(#URL_SITE_SPIP|parametre_url{lang,#LANG})]">[(#LANG|traduire_nom_langue)]</a></BOUCLE_langues>
Ce n’est pas dit dans l’article ci-dessus, mais... l’intérêt de cette contrib est-il qu’en changeant la langue, on pointe non pas vers la page d’accueil, mais vers la traduction de l’objet en cours ? Cela suppose que le site est traduit de façon parfaitement symétrique, n’est-ce pas ? Que se passe-t-il lorsqu’on demande l’anglais depuis un article français non traduit ? Idem, quand on demande l’anglais depuis une rubrique qui ne contient que des articles français ? Comment l’internaute est-il prévenu de ces comportements différents et désagréablement imprévisibles ?
Le #MENU_LANG est efficace, mais cette balise génère un menu déroulant qui ne correspond pas toujours à l’esthétique souhaitée. Aussi, comme tu l’as bien compris, l’intérêt de cette contribution est effectivement de permettre de pointer directement vers l’article traduit lors du changement de langue. Cela implique que le site est traduit de manière symétrique.
Lorsque l’article orignal n’a pas de traduction, celui renvoie à une erreur 404... ce qui n’est pas normal. Je vais voir comment améliorer ceci. Merci pour ton message.
Dans ce cas il faudra bien préciser cette nécessité d’avoir un site symétrique dans ses traductions.
Pourquoi ne pas adapter la balise
#MENU_LANG
? Le plugin SPIP-Bonux est-il véritablement indispensable ?Une adaptation du #MENU_LANG est effectivement possible... avec un peu de php etc
L’utilisation de SPIP-BONUX reste nécessaire pour le faire uniquement en boucles spip
Là l’intérêt était aussi de montrer que tout cela était faisable uniquement à partir de boucles SPIP... donc sans réelles connaissances de php... par tout un chacun, stylable comme il le souhaite etc ....
Répondre à ce message
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 : |