Détecter la langue et la région d’un utilisateur en PHP

Lorsqu’un utilisateur ouvre la page d’accueil d’un site international, il convient de lui proposer des contenus localisés correspondant à sa langue et sa région.

Cet article décrit comment détecter la langue et la région d’un utilisateur en PHP.

Prérequis

Les locales

Les locales sont des valeurs prédéfinies correspondant à une langue et à une région.

Par exemple :

fr_FR pour le français en France
fr_CA pour le français au Canada
en_US pour l'anglais aux États-Unis

Les locales permettent de gérer des contenus localisés (traductions, dates formatées, formats numériques et monétaires…).

Détecter la locale d’un utilisateur

La liste des locales préférées d’un utilisateur est fournie par son navigateur dans la variable $_SERVER[‘HTTP_ACCEPT_LANGUAGE’].

function DetectLocale() {
    $Language = str_replace('-', '_', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
    if (preg_match('/[a-z]{2}_[A-Z]{2}/', $Language, $MatchesArray)) {
        return $MatchesArray[0];  // Locale préférée
    }
    return 'fr_FR';  // Locale par défaut
}

Une fois la locale détectée, il est possible de :

  • Conserver la locale dans un cookie avec la fonction setcookie.
  • Rediriger l’utilisateur vers une partie localisée du site. Par exemple header(‘Location: http://fr-fr.mydomain.com’); ou header(‘Location: http://mydomain.com/fr-fr/’);
  • Définir la locale utilisée par PHP avec la fonction setlocale.
  • Afficher des dates formatées avec la fonction strftime.
  • Obtenir des informations de formats numériques et monétaires localisés avec la fonction localeconv.

2 commentaires à propos de “Détecter la langue et la région d’un utilisateur en PHP”

  1. Bonjour,
    J’utilise le theme Divi sur WordPress.
    Je redirige les visiteurs de mon site web sur la page d’accueil de la langue pref de leur navigateur.
    J’ai un menu « language » qui permet au visiteur de changer de langue s’il le souhaite.
    J’ai une page de contact par langue.
    Comment faire en sorte qu’un clic sur le menu « Contact » connecte le visiteur sur la page « contact » de la langue sur laquelle il se trouve a l’instant ?
    1 – au moment du changement de langue par le visiteur, capturer la langue de la page choisie
    2 – modifier le lien du « menu contact » pour la langue correspondante.
    Je ne sais pas realiser ces 2 points et cela fait une semaine que je cherche sur l’Internet ! Pouvez-vous m’aider svp ?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*