Forcer un changement de langue d’interface

Dernier point particulier de multilinguisme, on souhaite parfois avoir un mélange de langues entre l’interface et les contenus, mais en gardant une certaine cohérence. Précisément lorsqu’on souhaite afficher les articles dans la langue source si ils n’ont pas encore été traduits, sinon dans la langue de traduction. Dans ce cas là, on doit activer forcer_lang

Cependant, lorsque sur l’affichage d’un article, on liste les différentes traductions existantes, par exemple avec le modèle modeles/articles_traductions.html de SPIP, le lien généré ne changera pas la langue de l’interface, vu que forcer_lang conserve la langue du visiteur.

Si l’on désire que le fait de cliquer un lien de traduction implique un changement de langue d’interface (dans la même langue que la traduction appelée), il faut éditer le modèle articles_traductions.html ou en créer un nouveau. On utilise alors l’action « converser » permettant de générer un lien particulier qui redirigera sur l’article voulu dans la langue d’interface voulue de la sorte :

[(#VAL{converser}
	|generer_url_action{redirect=#URL_ARTICLE}
		|parametre_url{var_lang,#LANG})]

Exemple de modèle complet (et complexe !) :

Ceci est un modèle qui liste les différentes traductions d’un article. Si ce n’est pas la traduction en cours de lecture, un lien est proposé qui indique la langue de traduction.

<BOUCLE_article(ARTICLES){id_article}>
<BOUCLE_traductions(ARTICLES) {traduction} {par lang} {','}>[
	(#TOTAL_BOUCLE|>{1}|?{' '})
	<span lang="#LANG" xml:lang="#LANG" dir="#LANG_DIR"[ class="(#EXPOSE)"]>
		[(#EXPOSE{'',<a href="[(#VAL{converser}
			|generer_url_action{redirect=#URL_ARTICLE}
				|parametre_url{var_lang,#LANG})]" rel="alternate" hreflang="#LANG"[ title="(#TITRE|attribut_html|couper{80})"]>})]
		[(#LANG|traduire_nom_langue)]
		#EXPOSE{'',</a>}
	</span>
]</BOUCLE_traductions>
</BOUCLE_article>

Auteur Matthieu Marcillaud Publié le : Mis à jour : 12/03/23

Traductions : English, français, Nederlands