X
    Catégories : Développement et SEO

Détecter la langue du visiteur en PHP

Voilà quelque chose d’important…
Lorsque l’on fait un site internet, les considérations SEO doivent être prise en amont, afin de ne pas faire le travail deux fois. C’est pour cette raison que les référenceurs et les chefs de projet SEO doivent être impliqués dès le début de la conception du site afin de ne pas perdre de temps et garantir une structure HTML et un fonctionnement optimisés pour les moteurs de recherche.

Dans le cas du référencement multilingue d’un site e-commerce ou institutionnel, il est important de pouvoir présenter facilement et distinctement les différentes versions des pages.
Pour ce faire, il faut détecter la langue du visiteur. Mais vous allez me répondre que les moteurs ne donnent pas cette information… TOUT JUSTE ! Et c’est pour cela qu’il faut absolument définir une langue par défaut avant l’affichage de la page d’accueil.

Pour ce faire, il existe une fonction très simple en PHP qui permet de déterminer la langue du visiteur, et si celle-ci n’est pas disponible, alors une langue par défaut sera utilisée.

Voici le code :

//  Langues disponibles
$avail_lang = array('fr', 'en');

function checkLang(){
  global $avail_lang;
  $default_lang = 'en'; //  Langue par défaut choisie
  //  Changement volontaire
  if(isset($GLOBALS['lang']) && isset($_GET['lang']) && in_array($_GET['lang'], $avail_lang)){
    $GLOBALS['lang'] = $_GET['lang'];
  }
  //  Détection automatique
  elseif(!isset($GLOBALS['lang']) && !isset($_GET['lang'])){
    $lang = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
    $langage = strtolower(substr(chop($lang[0]), 0, 2));
    if($langage != '' && in_array($langage, $avail_lang)){
      $GLOBALS['lang'] = $langage;
    }
    else{
      $GLOBALS['lang'] = $default_lang;
    }
  }
  //  Détection du paramètre
  elseif(!isset($GLOBALS['lang']) && isset($_GET['lang']) && in_array($_GET['lang'], $avail_lang)){
    $GLOBALS['lang'] = $_GET['lang'];
  }
  //  Langue choisie au départ
  elseif(isset($GLOBALS['lang']) && !isset($_GET['lang'])){
    return;
  }
  //  Langue par défaut (doit correspondre à la plus grande audience)
  else{
    $GLOBALS['lang'] = $default_lang;
  }
  return;
}

Ici, le paramètre de langue est stocké dans une variable globale, et non en session, car les crawlers ne gèrent pas les cookies. Ainsi, la langue sera tout de même disponible pour traiter soit le contenu, soit une redirection.
On suppose dans cette fonction que l’argument correspondant à la langue est passé dans l’url de la manière suivante index.php?lang=fr

Et vous, avez-vous une autre astuce pour détecter la langue des visiteurs ?

Mathieu: