Sélectionner une page

Un site web multilingue

Quelques pistes pour gérer le plus simplement possible un site PHP en plusieurs langues.

Vous aimeriez avoir un site capable de toucher plus de monde dans sa langue maternelle ? Alors voici quelques manières de mettre en place les choses, à vous de choisir celle qui vous convient le mieux !

Pour rappel, ceci n’est que ma vision personnelle et ne représente pas une façon absolue de faire les choses. C’est simplement quelques idées qui me semblent les plus adéquates pour atteindre le cahier des charges fixé et qui sont les plus cohérentes pour les référenceurs.

Les choses en commun

Détection automatique de la langue

Pour commencer, on voudrait détecter automatiquement la langue préférée de l’utilisateur, selon la langue de son navigateur. On va stocker la langue dans la variable $lang :

// lang prend par défaut la langue du navigateur
if (!isset($lang) || $lang=='')
{
   $lang = explode("," , $_SERVER['HTTP_ACCEPT_LANGUAGE']);
   $lang = StrToLower(substr(chop($lang[0]),0,2));
}

Ainsi, dans la suite, on va rajouter à chaque lien l’information de langue, afin de conserver le choix d’une page à l’autre. On pourrait aussi utiliser un cookie, ou utiliser une variable de session, au choix.

Un peu d’URL Rewriting

Ensuite on aimerait que notre choix de langue et de page soit stocké dans l’url sans caractères spéciaux, afin de faire plus propre, comme dans : www.monsite.com/fr/mapage.html (au lieu de www.monsite.com/index.php?lang=fr&page=mapage). Pour cela on utilise un fichier htaccess avec les lignes suivantes :

RewriteEngine on
RewriteRule  ([a-z]{2})/([a-z]*).html$   index.php?lang=$1&page=$2 [L]

Cela implique que tous les liens utilisés dans votre site devront ressembler à www.monsite.com/fr/mapage.html. Les liens seront ainsi plus appréciés des référenceurs en même temps qu’ils seront compris de manière classique par votre code PHP, à savoir sous la forme www.monsite.com/index.php?lang=fr&page=mapage.

Pour les petits sites…

Pour les sites statiques, ou dont le texte ne va pas forcément changer souvent, on peut imaginer un tableau PHP par langue, que l’on nourrit de notre plume. Suivant la valeur de $lang, on initialisera un tableau ou un autre, et dans notre BODY, on appellera les différentes lignes de notre tableau où c’est nécessaire.

// Déclaration du tableau
$lang = array();

// Initialisation du tableau en fonction de la langue
switch($lang){
   case "fr":
      $lang[0] = "Bienvenue sur le site !";
      $lang[1] = "Au revoir !";
      break;
   case "en":
      $lang[0] = "Welcome to this website!";
      $lang[1] = "Goodbye!";
      break;
   case default:
      $lang[0] = $lang[1] = "漢";
}
// Appel du texte à afficher, suivant la langue choisie :
echo '<p>'.$lang[0].'<br />'.$lang[1].'</p>';

… et pour les plus imposants

On peut bien sûr utiliser une base de données au choix pour stocker le texte dans chaque langue, mais comme je voulais faire simple, j’ai créé un dossier /lang/ dans lequel il y a un dossier pour chaque langue du site. Le texte y est directement écrit en html dans différents fichiers que l’on inclut où il faut, suivant la page visitée par l’utilisateur. On peut en profiter pour initialiser quelques variables spécifiques à la langue affichée, comme par exemple la description ou les mots-clés de la page.

Le désavantage est qu’il faut parler couramment le html et connaître ses balises css, mais votre travail peut être allégé en utilisant des balises bbcodes et un éditeur adapté.


Quelques liens utiles :

Poster le commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *