PHP: Detection de la langue du visiteur
Par knoodrake le mercredi, février 21 2007, 13:46 - Informatique - Lien permanent
Comment puis-je détécter la langue du visiteur pour éventuelement le rediriger vers tel ou tel version de mon site ?
Une des variables superglobales de PHP est la variable $_SERVER ( ou $HTTP_SERVER_VARS pour les versions de php anterieures a 4.1 ). Comme c'est une variable super globale, nul besoin de la déclarer d'aucune manière, elle sera accésible n'importe quand et n'importe ou.Dans cette variable (un tableau en fait) on va trouver les informations contenus dans
$_SERVER['HTTP_ACCEPT_LANGUAGE']
, ce qui donne quelque chose comme "fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3" (une chaine de caractère).Donc à partir de la, plusieurs solutions:
De nombreuses bibliothèques peuvent prendre en charge le "décriptage" de cette chaine comme par exemple l'illustre PECL. Voir la fonction http_negociate_language.
Une autre possibilité, moins éfficace mais qui évite d'installer une librairie tièrce, c'est de ranger tout les morceaux de la chaine dans un tableau et de ne prendre en compte que le premier élement (qui est la langue par defaut ) , comme dans l'exemple que je vous propose:
$lang = explode(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
if (($langs[0] == "en" )|($lang[0]=="en-us"))
header("Location: http://monsite.versionAnglaise.com");
Pour information, la detection ainsi qu'une éventuelle redirection peuvent aussi s'éffectuer simplement avec les entêtes html, ou bien encore à l'aide de Javascript.Enfin, si redirection il y à, il est très important de toujours laisser la possibilité au visiteur de choisir lui-même la version du site qu'il souhaite visiter. Ainsi, pensez à mettre (et bien en évidence) un lien vers le site dans les autres langues disponibles.