Renoir Boulanger Un geek social et Linuxien de nature

Detection de langue

Lorsqu’on travaille sur un site qui doit avoir plusieurs langues… il m’arrive souvent de devoir détecter la langue du visiteur. Ce bout de code permet de détecter la langue selon les données fournies dans HTTP_ACCEPT_LANGUAGE et HTTP_USER_AGENT. Il faut comprendre que ce n’est pas une solution absolue, mais un bout de code qui peut s’avérer utile! Toujours utile pour configurer … Continued

Lorsqu’on travaille sur un site qui doit avoir plusieurs langues… il m’arrive souvent de devoir détecter la langue du visiteur. Ce bout de code permet de détecter la langue selon les données fournies dans HTTP_ACCEPT_LANGUAGE et HTTP_USER_AGENT. Il faut comprendre que ce n’est pas une solution absolue, mais un bout de code qui peut s’avérer utile!

Toujours utile pour configurer la langue. Ce bout de code permet de savoir la préférence du language du visiteur… il est utile lorsqu’on place ensuite des images ou des bouts de texte avec des conditions. Voici le code…

// --- DEBUT DU BOUT DE CODE --- 
/**
  * Les langues disponibles
  **/
  $langues[] = 'fra'; # AUSSI LA LANGUE PAR DEFAUT
  $langues[] = 'eng'; 
 
/**
  * Avoir la liste des details HTTP_USER_AGENT et HTTP_ACCEPT_LANGUAGE dans $ua  
  **/
 foreach(explode(';',$_SERVER['HTTP_USER_AGENT']) as $agent_details)
   $ua[] = substr(trim($agent_details), 0, 2); 
 foreach(explode(';',$_SERVER['HTTP_ACCEPT_LANGUAGE']) as $agent_details)
   $ua[] = substr(trim($agent_details), 0, 2); 
 
/**
  * Avoir la liste des traductions possibles... puis setter la langue
  **/
 foreach($GLOBALS['langues'] as $trx) {
   if(in_array(substr($trx, 0, 2), $ua))
     $langue = "$trx";
   else
     $langue = $GLOBALS['langues'][0];
 } // --- FIN DU BOUT DE CODE --- @@

Ensuite, on appelle la reponse avec $GLOBALS['langue'] (a l’intérieur d’une fonction), ou encore $langue… vous pouvez utiliser évidemment la structure de noms que vous voulez. Un exemple intéressant d’usage pourrait etre lorsqu’on veut charger une image en fonction de la langue actuelle… on pourrait le faire ainsi:

 return "<img src=\"/path/to/image/?={$langue}/design_slice_12.jpg\" alt=\"Welcome\" border=\"0\" />";

Comments

  1. Boulanger Renoir

    Oouf. ça fait longtemps ce code là! Faudrait voir autrement la génération du code que de le mettre à bras ainsi!

Comments are closed.