begin process at 2012 02 04 22:41:00
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > SITE MULTILINGUE AVEC DÉTECTION DE LA LANGUE DE L'EXPLORATEUR

SITE MULTILINGUE AVEC DÉTECTION DE LA LANGUE DE L'EXPLORATEUR


 Information sur la source

Note :
9 / 10 - par 3 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Tutoriaux Niveau :Initié Date de création :10/04/2005 Date de mise à jour :20/04/2006 18:38:20 Vu / téléchargé :22 781 / 1 343

Auteur : janhsh

Ecrire un message privé
Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

 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

  • <?
  • . . .
  • //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
  • ...
  • ?>
<?
. . .
//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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

10 avril 2005 21:28:47 :
13 avril 2005 18:10:58 :
Mini site fonctionnel utilisant cette routine
20 avril 2006 18:36:55 :
Comme certains semblent avoir un problème pour utiliser le script base_Inc.php, voici un petit exemple de site fonctionnel de 4 pages très rudimentaire (avec menu de sélection des pages et de changement de langue).
20 avril 2006 18:38:20 :
Comme certains semblent avoir un problème pour utiliser le script base_Inc.php, voici un petit exemple de site fonctionnel de 4 pages très rudimentaire (avec menu de sélection des pages et de changement de langue).

 Sources du même auteur

Source avec Zip Source avec une capture CLASSE DE MESSAGERIE
Source avec Zip REGEXP POUR VÉRIFIER LA VALIDITÉ D'UNE ADRESSE MAIL SUIVANT ...
Source avec Zip CLASSE POUR EMPÊCHER LES SOUMISSIONS MULTIPLES DE FORMULAIRE
WWW-AUTHENTICATE AVEC PHP EN MODE CGI

 Sources de la même categorie

Source avec une capture INTÉGRER À UNE BASE DE DONNÉES DES COORDONNÉES GÉOGRAPHIQUES... par slhuilli
Source avec Zip DÉCOMPOSER UN CODE PHP AVEC LA FONCTION INCLUDE par Julien39
CRÉATION D'UN SCRIPT D'AUTHENTIFICATION par phpAnonyme
Source avec Zip Source avec une capture N/X API: GOOGLE MAPS DEPUIS PHP VALID W3C par GillesWebmaster
PHP EXTRAIRE DES MAILS D'UN GROS FICHIER LOCAL OU DISTANT par cosmoswarezone1

Commentaires et avis

Commentaire de ImmortalPC le 13/04/2005 16:06:22

Salut,
je ne sais pas si le code marche je ne l'ai pas testé mais j'ai vu 2 grandes érreurs :
<? qui devient <?php ( raison de compatibilité )
et " devient ' ( raison de vitesse )

@+++

Commentaire de roilezard le 18/04/2005 08:39:31

Script qui me parait très compliqué quand on peut faire beaucoup plus simple et que ça marche

Commentaire de janhsh le 16/09/2005 14:59:37

Le script marche très bien, pour le tester, voyer le site www.ubg-bul.be

Il y a effectivement moyen de faire plus simple mais beaucoup de site qui font simple ne font que demander la langue de l'utilisateur sans tenir compte du choix initial que l'utilisateur à configuré dans son explorateur.

Le but de ce script est aussi de montrer comment interpréter le contenu de la variable HTTP_ACCEPT_LANGUAGE  

Commentaire de Drakstar le 18/09/2005 12:52:11

Enfin un script de langue qui implément la norme de présélection linguistisque renvoyé dans le header ACCEPT_LANGUAGE et qui en plus, si l'utilisateur n'a pas bien configurer son brownser, lui demande alors la langue.
Je pense que je vais l'utiliser sur mon site ;)

Commentaire de Calisse le 13/10/2005 16:21:55

Ce script est super, je n'aurais pas fait mieux c'est certain. Il est très simple d'intégration et pas besoin d'y faire beaucoup de modification. Pour ma part au lieu de faire un include j'ai fais une redirection avec un if.

Commentaire de fred65200 le 07/03/2006 01:42:41

Super, c'est exactement ce que je cherchais.
Très facile à mettre en œuvre.
Merci pour le presque "tout cuit"

Commentaire de pblake le 20/04/2006 10:39:49

pas mal pour la page index mais comment conserver le choix de la langue sur les autres pages du site ?

Commentaire de janhsh le 20/04/2006 18:45:31

Le module utilise les sessions. Il faut les activer avec  session_start(); avant d'utiliser include("base_Inc.php");

Je viens de modifier l'exemple pour en faire un mini-site de 4 pages (utilisant toujours le même fichier base_Inc.php )



Si vous testez le site avec un explorateur non configuré, vous verrez apparaître une page avec

                    Bienvenue
                    Welkom
                    Welcome

Si votre explorateur est correctement configuré, vous verrez apparaître la page index dans la langue de votre configuration.

Un menu au-dessus de cette page vous permet entre-autre de forcer une langue différente.

Lors d'un changement de page, la langue est conservée.

Commentaire de nunoluciano le 28/05/2006 19:37:29

Très pratique pour un pays comme la suisse avec l'allemand, l'italien et le français comme langues officielles.

Merci

Commentaire de jojona46 le 28/07/2006 14:30:26

ça marche mais j'ai un petit probleme, je ne sais pas si j'ai malconfiguré ou pas mais j'ai copié tous le fichier téléchargé dans ma racine et ça fiiche une erreur
" Warning: main(localhost/Languages/Lang_FR/lang_main.php): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\Includes\base_Inc.php on line 106

Warning: main(): Failed opening 'localhost/Languages/Lang_FR/lang_main.php' for inclusion (include_path='.;C:\PROGRA~1\EASYPH~1\\php\smarty\') in c:\program files\easyphp1-8\www\Includes\base_Inc.php on line 106
".
J'utilise easyphp1.8.
Est ce c'est pour cette raison?

Commentaire de jojona46 le 28/07/2006 15:14:26

ça marche et j'ai trouvé mon erreur.
Merci et bon dev à tous!........

Commentaire de fdiedler2000 le 17/04/2007 23:59:40

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 ?

Commentaire de fred65200 le 18/04/2007 00:06:19

Ce script ne fait que détecter la langue du navigateur.A toi de placer les traductions dans les dossier correspondants.
Salutations.

Commentaire de fdiedler2000 le 18/04/2007 10:02:42

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....

Commentaire de roilezard le 18/04/2007 18:24:16

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.

Commentaire de fdiedler2000 le 18/04/2007 19:19:30

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 ^^

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales