Site multilingue avec détection de la langue de l'explorateur

Description

Les navigateurs modernes permettent de spécifier dans leur configuration la priorité des langues acceptées par l'utilisateur.
Cette configuration est récupérable dans via la variable HTTP_ACCEPT_LANGUAGE
Le contenu de cette variable contient une chaîne du type

"nl-be,fr-be;q=0.8,en-ca;q=0.5,de-lu;q=0.3"

Dans cette haine, les différentes langues et pays sont séparé par des virgules. Ces codes linguistiques sont accompagnés d'un poids ";q= ;" compris entre 0 et 1 qui indiquent la priorité affectée à cette langue par l'utilisateur.

Cette chaîne n'est malheureusement pas affectée si l'utilisateur a mal configuré son explorateur. Dans ce cas, une page doit être affichée pour lui permettre de sélectionner la langue de son choix.
Le résultat sera maintenu en session ou dans un cookie.

Source / Exemple :


<?
. . .
//Votre code
. . .

// Définir ici l'adresse de base de votre site le serveur
define('HTML_ROOT_PATH',"/var/www/html/");    // doit se termine par /

// Définir ici les langues disponibles sur votre site
$Lang_List=array("FR","NL","DE","EN");  

/*
les fichiers langues devront être placé dans les répertoires 
  /Languages/Lang_FR/ pour le francais, 
  /Languages/Lang_EN/ pour l'anglais, 
  ...

  • /
/******************************************************************************/ /* UBG-BUL - - Union Belge des Géomètres - Belgische Unie van Landmeters */ /* (c) UBG-BUL -- Tous droits réservés */ /******************************************************************************/ /* Conception et programation par Jacques Houbart */ /******************************************************************************/ /* Ce Script est sous licence LGPL, ni plus, ni moins */ /******************************************************************************/ //**************************************************************************** // Détermination de la langue de l'utilisateur en fonction de sa configuration //**************************************************************************** if (isset($_GET['Language'])&&(@in_array($_GET['Language'],$Lang_List))) { define('LANGUAGE', $_GET['Language']); } elseif (isset($_SESSION["UserLanguage"])) { define('LANGUAGE', $_SESSION["UserLanguage"]); } else { $Accept_Lang=explode(",",$_SERVER['HTTP_ACCEPT_LANGUAGE']); reset($Accept_Lang); while ( list($Index,$Language)=@each($Accept_Lang)) { if (eregi( "^(.+);q=([0-9.]*)$", $Language , $Part)) { $Accept_Lang[$Index]=$Part[2] . ';'.strtoupper($Part[1]); } else { $Accept_Lang[$Index]='1.0;'.strtoupper($Accept_Lang[$Index]); } } arsort($Accept_Lang); //tri par ordre de préférence reset($Accept_Lang); while (list(,$ALang)=@each($Accept_Lang) ) { reset($Lang_List); while ( list(, $Language) = @each($Lang_List) ) { if (strpos($ALang,$Language)!=0) { define('LANGUAGE', $Language); break 2; } } } unset($Accept_Lang, $ALang,$Language); } if (!defined('LANGUAGE')) { //---------------------------------------------------------------------- // Détermination de la langue de l'utilisateur impossible // ->> affichage d'une page pour sélectionner la langue //-------------------------------------------------------------------------- $StartUrl=$_SERVER["REQUEST_URI"].(preg_match("/\?/",$_SERVER["REQUEST_URI"])?"&":"?"); ?> <html> <body> Ceci est votre page de sélection de la langue Bon! 'est une versuin très simplifiée, mais c'est pour le principe qui compte <a href="<?=$StartUrl ?>Language=FR">Bienvenue </a><br /> <a href="<?=$StartUrl ?>Language=NL">Welkom </a><br /> <a href="<?=$StartUrl ?>Language=EN">Welcome</a><br /> </body> </html> <? exit; } $_SESSION["UserLanguage"]=LANGUAGE; define('HTML_LANG_PATH',HTML_ROOT_PATH . 'Languages/Lang_'. LANGUAGE .'/'); //**************************************************************************** /* Voilà, à partir d'ici, la langue du site est définie Pour charger un fichier propre à une langue, utiliser
  • /
include(HTML_LANG_PATH."lang_main.php"); //Il faut évidement qu'un fichier lang_main.php soit disponible pour chaque langue dans le répertoire approprié ... Le restant de votre page ... ?>

Conclusion :


Ce code fonctionne sur notre site http://www.ubg-bul.be

Note importante:
C'est extrait de code est propriété de l'UBG-BUL- Union Belge des Géomètres - Belgische Unie van Landmeters.

Vous pouvez l'utiliser sous licence LGPL (voir http://www.gnu.org/copyleft/lesser.html ou la traduction FR sur http://www.linux-france.org/article/these/licence/lgpl/lgpl_monoblock.html)

JH

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.