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

Soyez le premier à donner votre avis sur cette source.

Vue 28 146 fois - Téléchargée 1 984 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

Messages postés
383
Date d'inscription
samedi 29 janvier 2005
Statut
Membre
Dernière intervention
1 décembre 2008

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 ^^
Messages postés
3
Date d'inscription
samedi 28 août 2004
Statut
Membre
Dernière intervention
18 avril 2007

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.
Messages postés
383
Date d'inscription
samedi 29 janvier 2005
Statut
Membre
Dernière intervention
1 décembre 2008

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....
Messages postés
100
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 février 2009

Ce script ne fait que détecter la langue du navigateur.A toi de placer les traductions dans les dossier correspondants.
Salutations.
Messages postés
383
Date d'inscription
samedi 29 janvier 2005
Statut
Membre
Dernière intervention
1 décembre 2008

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.