Spip - Site multilingue

Accueil / Articles / Spip - Site multilingue
Spip - Site multilingue

Article publié le 20 juillet 2017  Mot(s) clé :   Spip  Enregistrer au format PDF   Version PDF

Je viens de réaliser un site en trois langues (Français, Anglais et Espagnol). Je note ici les différentes astuces pour gérer un site multilingue sous Spip. Essentiellement pour moi, pour ne pas avoir à les rechercher.

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.

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.

Principe de base

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.

Organisation

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.

Niveaux de rubriques

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 la navigation

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>

Toujours pour la navigation

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)

Le pied de page

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)

Balise #URL_SITE_SPIP

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})]">

Ces articles peuvent vous intéresser