lundi 1 avril 2013

Déterminer la langue d'un visiteur en PHP

 Comment récupérer la langue d'un visiteur dans le contexte d'un site multilingue ?

La variable globale qui contient l'information est $_SERVER['HTTP_ACCEPT_LANGUAGE'].

Voici un exemple du contenu de cette variable de langue :
fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3


Ce qui nous intéresse ici c'est le fr en tout début de ligne.
On récupère les deux premières lettres en utilisant une regex qui va en plus nous permettre d'utiliser les autres données si nécessaire grâce à la fonction preg_split (php 5)
<?php
$tmp = preg_split('",|;"', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
echo '<pre>';
    print_r($tmp);
echo '</pre>';
?>

Le print_r($tmp); va donner quelque chose comme ceci :
Array
(
    [0] => fr
    [1] => fr-fr
    [2] => q=0.8
    [3] => en-us
    [4] => q=0.5
    [5] => en
    [6] => q=0.3
)


Voici un exemple de code PHP pour définir la langue du visiteur.
Nous aussi définir une liste de langue dans laquelle le site est traduit.
<?php
$langages_Accepted = array(
    'en' => 'English',
    'fr' => 'Français',
    'de' => 'Deutch'
);

$langue_Defaut = 'fr';
$langue_Selected = $langue_Defaut;

$tmp = preg_split('",|;"', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
$langue_Client = $tmp[0];


if(in_array($langue_Client, $langages_Accepted))
{
    $langue_Selected = $langue_Client;
}

echo '<p>Langue du visiteur : '.$langue_Selected.'</p>';
?>

On peux très bien imaginer une redirection à la place du echo à la fin du script comme ceci :
header('location:http://'.$langue_Selected.'.domaine.com');
exit();

Aucun commentaire:

Enregistrer un commentaire