Accueil > Articles > Spip - Site multilingue
Sources :
il y a quelques pages de référence sur les sites multilingues sous spip, parmi lesquelles :
L’article de base : Site multilingue sous Spip
Le Forum Spip, dans lequel beaucoup de questions ont été posées à ce sujet.
Et aussi, chez Romy : Comment j’ai traduit mon site
Les problèmes exposés ici sont ceux que j’ai rencontrés, et pour lesquels j’ai trouvé une solution, grâce aux réponses que d’autres ont partagées, ou grâce aux questions posées dans les forums. Je n’ai donc aucune paternité sur ces bouts de code. Simplement, je les compile ici, pour ne pas avoir à les rechercher si, d’aventure, je dois faire un autre site multilingue sous spip.
Un site multilingue, c’est presque un site par langue en terme de travail. Il convient d’en tenir compte et de bien l’expliquer au client.
Truc tout bête par exemple : il faut un formulaire de contact par langue.
J’ai créé une rubrique par langue. Dans chaque rubrique par langue, j’ai créé les rubriques de mon site. J’utilise les plugins Traduction entre rubriques et Traduction de rubriques autrement.
Ne pas oublier d’activer le multilinguisme dans la Configuration du site.
De part mon organisation, ma hiérarchie est la suivante :
Rubrique de langue > Rubriques du site par langue.
Lorsque je fais une boucle pour afficher mes rubriques, je ne veux pas afficher le niveau "Langue", mais directement les rubriques dans chaque langue.
Pour cela, j’utilise le type de boucle suivant :
<div class="menu">
<BOUCLE_rub_meres(RUBRIQUES) {lang}>
<ul>
<BOUCLE_rub_filles(RUBRIQUES) {id_parent} {0,5}{lang}>
<li><a href="#URL_RUBRIQUE">#TITRE</a></li>
</BOUCLE_rub_filles>
</ul>
</BOUCLE_rub_meres>
</div>
(on verra ci-dessous que cette boucle ne convient pas complètement. Mais procédons par étape, car je n’ai pas tout trouvé d’un coup...)
Pour une boucle qui affiche l’ensemble des rubriques, s’il y a un lien vers une rubrique, il faut passer la langue dans l’URL.
Par exemple pour la navigation. Si on se contente de :
<div class="menu">
<BOUCLE_rub_meres(RUBRIQUES) {lang}>
<ul>
<BOUCLE_rub_filles(RUBRIQUES) {id_parent} {0,5}{lang}>
<li><a href="#URL_RUBRIQUE">#TITRE</a></li>
</BOUCLE_rub_filles>
</ul>
</BOUCLE_rub_meres>
</div>
Le menu affiché lorsque l’on clique sur une rubrique est toujours le menu en français, la langue par défaut.
Pour avoir le menu dans la bonne langue, il faut passer la langue dans l’URL :
<div class="menu">
<BOUCLE_rub_meres(RUBRIQUES) {lang}>
<ul>
<BOUCLE_rub_filles(RUBRIQUES) {id_parent} {0,5}{lang}>
<li><a href="[(#URL_RUBRIQUE|parametre_url{lang, #LANG})]">#TITRE</a></li>
</BOUCLE_rub_filles>
</ul>
</BOUCLE_rub_meres>
</div>
Ma page d’accueil comporte un diaporama défilant. J’affiche sur la page d’accueil le diaporama et l’article de la rubrique 1 (Bienvenue)
Si je fais une boucle de navigation sur mes rubriques, je vais afficher toutes mes rubriques par langue. Et donc mon menu va me proposer la rubrique 1 (Bienvenue) et non la page d’accueil du site.
Dans ma boucle de navigation, je dois donc retirer la rubrique 1 de la boucle pour la replacer par la page d’accueil.
Sauf que je dois appeler la page d’accueil dans la bonne langue. Pour cela, j’ai recours à un bloc multi :
<div class="menu">
<ul>
<li><a href="[(#URL_SITE_SPIP|parametre_url{lang, #LANG})]"><multi>[fr]Bienvenue [en]Welcome [es]Bienvenida</multi></a></li>
<BOUCLE_rub_meres(RUBRIQUES) {lang}>
<BOUCLE_rub_filles(RUBRIQUES) {id_parent} {1,4}{lang}>
<li><a href="[(#URL_RUBRIQUE|parametre_url{lang, #LANG})]">#TITRE</a></li>
</BOUCLE_rub_filles>
</ul>
</BOUCLE_rub_meres>
</div>
De ce fait, j’arrive bien sur la page d’accueil du site, dans la bonne langue, et le lien se fait que le bon mot (Bienvenue, Welcome ou Bienvenida)
On peut aussi utiliser la balise <multi>
et se simplifier la vie pour traduire les infos du pied de page, qui ne changeront pas beaucoup (contact, mentions légales, etc)
Ne pas oublier de passer la langue dans la balise URL_SITE_SPIP, ce qui donne le code suivant :
<a href="[(#URL_SITE_SPIP|parametre_url{lang, #LANG})]">
D'autres articles avec le mot clé « Spip »
Je viens de tenter une installation de Spip 3.2.19 avec Checkout, comme décrit dans mon article (…)
Spip est disponible sous Github ; pour tout installer (core + plugin dist + squelettes dist) on (…)
Je note ici tout ce qui me semble nécessaire pour coder proprement la balise #LOGO_ARTICLE pour (…)
J’ai découvert Grunt en étudiant la création de site sous Thélia 2. Un peu compliqué à prendre (…)