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

Soyez le premier à donner votre avis sur cette source.

Vue 29 507 fois - Téléchargée 2 091 fois

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

Ajouter un commentaire Commentaires
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
18 avril 2007 à 19:19
Donc en fait, il y a une page en PHP pour les langues avec toutes les traductions ? ET puis en fait une sorte de "Select case" en fonction de la langue du site ? Mais pour un site assez conséquent, imagines la quantité d'informations à traduire... ca peux prendre du temps !
PS : Je critique pas ta source ^^
roilezard Messages postés 3 Date d'inscription samedi 28 août 2004 Statut Membre Dernière intervention 18 avril 2007
18 avril 2007 à 18:24
L'intérêt est de n'avoir qu'une seule page de code pour toutes les langues. Ainsi, en cas de modification, il n'y a qu'une page à modifier. Mieux vaut quelques lignes de code supplémentaires qu'une perte de temps à modifier toutes les même pages d'un site multilingue.
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
18 avril 2007 à 10:02
Ah ok donc autant refaire un site directement je comprends pas l'interet de toutes les sources sur ce sujet !

Car je vais copier coller du site en francais et je change juste les traductions et le tour et jouer....
fred65200 Messages postés 100 Date d'inscription lundi 21 février 2005 Statut Membre Dernière intervention 18 février 2009
18 avril 2007 à 00:06
Ce script ne fait que détecter la langue du navigateur.A toi de placer les traductions dans les dossier correspondants.
Salutations.
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
17 avril 2007 à 23:59
Salut, je voulais savoir est ce que la traduction du site est automatique ou alors il faut taper tout les textes des menus et les contenus dans la langue avant ?
Afficher les 16 commentaires

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.