La première chose à faire lorsque l’on dispose d’un contenu en plusieurs langues est tant que possible de proposer à chaque nouveau visiteur la version la plus appropriée.
En général, si je suis un utilisateur français et que j’arrive
sur un site qui dispose de plusieurs versions linguistiques, dont une française, je serais heureux qu’on me propose celle-ci par défaut.
La méthode proposée ici s’applique bien sûr dans les grandes lignes à tout type de site, et donc en particulier aux sites gérés avec SPIP.
Un mécanisme éprouvé
Pour présenter la solution que je propose, je m’appuie sur une expérience concrête que je mène depuis des années pour mon site phpHeaven.
Voici les quelques règles qui y sont appliquées pour optimiser la satisfaction du visiteur :
- Un utilisateur dont le navigateur est configuré avec le français comme
langue préférée arrive pour la première fois sur phpHeaven, il arrive
directement sur la version française du site. - Un utilisateur dont le navigateur est configuré avec l’anglais comme
langue préférée arrive directement sur la version anglaise du site. - Un utilisateur dont le navigateur est configuré avec l’allemand comme
langue préférée et l’anglais comme seconde langue arrive directement
sur la version anglaise du site. - Un utilisateur qui n’a aucune configuration de langue mais a installé
une version française de IE arrive directement sur la version
française. - Une fois sur le site, a tout moment, il est possible de passer d’une version à une autre.
- Un utilisateur qui autorise les cookies aura par défaut la version
qu’il a consulté la dernière fois qu’il est venu, quelle que soit sa
configuration de navigateur.
A propos de ce dernier point, en voici la logique : mes browsers sont configurés avec l’anglais comme langue principale et le français comme seconde langue. La plupart des sites multilingues sont anglophones, et les versions traduites qu’ils proposent sont souvent déplorables, donc je préfère la version d’origine. Par contre, sur mon site bilingue phpHeaven, je consulte plutôt la partie francophone, grace à un cookie placé par phpLang.
Surtout ne pas réinventer la roue
En fait, c’est historiquement le système que j’ai développé pour le
site phpHeaven, que j’ai ensuite diffusé sous le nom phpLang, puis
appliqué dans phpMyChat, et qui a été appliqué par un des développeurs
de ce dernier, Loïc Chapeau, dans phpMyAdmin.
Tant d’utilisations qui font que ce tout petit script est largement éprouvé fonctionnellement et techniquement, et n’est donc pas à réinventer.
D’accord, mais comment ça marche ?
Entrons enfin dans le vif du sujet, avec l’adaptation faite pour gérer le contenu bilingue (Français et Anglais) du SPIP de phpHeaven.
Sur phpHeaven, j’ai donc mon script index.php
qui fait juste appel à phpLang :
index.php
<?php
require_once 'phpLang.inc.php';
?>
phpLang s’occupe alors de détecter lequel de index.fr.php
et index.en.php
est le plus approprié pour l’utilisateur, et en fait l’inclusion.
index.en.php
redirige en fait vers en.html
qui est intercepté par une rewrite rule Apache pour servir finalement secteur.php3?id_rubrique=1
, et de même avec la version française :
index.en.php
<?php
header('Location: http://'.$_SERVER['HTTP_HOST'].'/en.html');
?>
httpd.conf ou .htaccess
RewriteRule ^(.*)en.html$ $1secteur.php3?id_rubrique=1 [QSA]
RewriteRule ^(.*)fr.html$ $1secteur.php3?id_rubrique=2 [QSA]
J’ai ainsi un secteur d’identifiant 1 avec les contenus en anglais et un secteur d’identifiant 2 avec les contenus en français.
Il n’y a que très peu de textes d’interface en dehors des contenus d’articles, donc je fais la différence entre anglais et français directement dans les squelettes via du PHP qui teste la valeur de #ID_SECTEUR
.
Voici par exemple comment afficher différemment une date selon la langue :
<?php
if (#ID_SECTEUR == 1) {
echo '[(#DATE|mois)]/[(#DATE|jour)]/[(#DATE|annee)]';
} else {
echo '[(#DATE|jour)]/[(#DATE|mois)]/[(#DATE|annee)]';
}
?>
OK, ça marche, mais maintenant je voudrais bien avoir de jolis drapeaux pour changer de langue ...
Pour gérer l’affichage des drapeaux de la langue alternative, et potentiellement de plusieurs langues alternatives, de simples boucles suffisent si l’on applique les principes suivants :
- le code de langue est indiqué dans le descriptif du secteur
- le nom de la langue est indiqué dans le texte du secteur
- le drapeau de la langue est mis en logo du secteur
Voici ainsi les boucles à utiliser pour afficher les drapeaux de sélection de langue(s) alternative(s) :
<BOUCLE_cette_langue(RUBRIQUES) {id_parent=0} {id_secteur} {doublons}></BOUCLE_cette_langue>
<BOUCLE_autres_langues(RUBRIQUES) {id_parent=0} {doublons}>
<a href="/index.php?phpLang=#DESCRIPTIF">
<img src="IMG/[(#LOGO_RUBRIQUE|fichier)]" align="absmiddle" border="0" /></a>
<a href="/index.php?phpLang=#DESCRIPTIF">#TEXTE</a>
</BOUCLE_autres_langues>
Ces boucles doivent être placées au sein de la boucle principale du squelette, puisqu’elles utilisent l’identifiant du secteur courant pour déterminer la langue courante.
Notez que pour afficher tous les drapeaux, y compris celui de la langue courante, il suffit de supprimer la première boucle dont l’objectif unique est en effet de supprimer cette langue courante.
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 : |