Détection langue de l'internaute
Résolu
Ifryona
-
sebsauvage Messages postés 33284 Date d'inscription Statut Modérateur Dernière intervention -
sebsauvage Messages postés 33284 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je viens de créer un site en deux langues (français et anglais) et je souhaiterai que la langue soit détectée directement à l'arrivée sur le site et ainsi que l'internaute soit redirigé automatiquement sur la version fr ou en.
Dans quelles conditions est-ce possible et de quelle façon ?
Merci par avance,
Ifryona.
Je viens de créer un site en deux langues (français et anglais) et je souhaiterai que la langue soit détectée directement à l'arrivée sur le site et ainsi que l'internaute soit redirigé automatiquement sur la version fr ou en.
Dans quelles conditions est-ce possible et de quelle façon ?
Merci par avance,
Ifryona.
Configuration: Windows XP Firefox 3.0.13
12 réponses
-
En principe les navigateurs envoient la langue par défaut de l'internaute dans les entêtes HTTP.
Exemple: Accept-Language=fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Les différentes langues sont indiquées dans l'ordre.
(fr = français, fr-fr pour le français de la France (il y a aussi des variations belgique, canada...)
ensuite en-us pour l'anglais (américain), etc.
C'est assez fiable.
C'est ce qu'utilisent les sites Mozilla.com et Opera.com pour afficher automatiquement la page dans la bonne langue. -
Merci pour la réponse.
J'ai vu qu'on pouvait utiliser la variable $HTTP_ACCEPT_LANGUAGE.
Je cherche encore à savoir comment elle fonctionne.
Est-ce la façon la plus fiable ?
Ifryona. -
Je cherche encore à savoir comment elle fonctionne.
Est-ce la façon la plus fiable ?
Une manière simple de procéder: prendre les 2 premiers caractères.
Si tu trouves "fr" tu sers des pages en français, sinon tu sers des pages en anglais.
La méthode est simple et évite d'avoir à parser la chaîne complète. -
Sinon avec _SERVER["HTTP_USER_AGENT"]
ça me donne par exemple chez moi:Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.13) Gecko/2009080315 Ubuntu/9.04 (jaunty) Firefox/3.0.13
A toi de faire ensuite un script pour utiliser ça. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Non non, il ne faut pas se baser sur le User-Agent, mais sur le Accept-Language.
-
Les langues sont les code ISO (fr=français, en=anglais...)
Les variantes culturelles sont indiquées par un tirer:
en-us : anglais américain
en-uk : anglais (grande-bretagne)
etc.
En prenant seulement les deux premières lettres, ça suffit (à moins que tu veuille fournir des messages français différentes pour les Français, les Canadiens ou les Belges par exemple).
Le q=... sert à donner un poids (pondération) de préférences, mais de toute manière les langues sont toujours indiquées dans l'ordre de préférence, il n'y a pas besoin de s'occuper de ce paramètres: Il suffit de prendre la première. -
De rien !
-
Penses à passer le sujet en "Résolu" si ça a résolu ton problème: Cela aidera les internautes qui ont le même problème à trouver plus facilement la solution.
-
Bonjour et merci pour toutes ces rapides réponses ! Je vais m'occuper de tester cela et je vous tiens au courant !
-
Bonjour à tous,
J'ai mis en place le code pour la détection de la langue du navigateur et j'y suis presque !!
Je pense qu'il ne manque pas grand chose, mais voilà mon soucis :
- je change la langue du navagateur (je passe en "en"),
- je lance mon site : il est en français,
- je rafraichit la page (via F5), le site se charge bien en anglais...
Je ne comprends pas trop, pourquoi ne prend-il pas directement la langue en compte ? Je pense qu'il doit y avoir un soucis d'odre de déclaration ou quelques chose comme ça... Est ce que quelq'un a une idée ? car là j'avoue que je vois pas ! ^^ Voici mon code :
<?php session_start(); function autoSelectLanguage(array $languages, $default = 'fr') { if(!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { $aBrowserLanguages = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']); foreach($aBrowserLanguages as $sBrowserLanguage) { $lang = strtolower(substr($sBrowserLanguage,0,2)); if(in_array($lang, $languages)) { return $lang; } } } return $sDefault; } $lang = ""; if (isset($_GET['lang'])) { $lang = $_GET['lang']; $_SESSION['lang'] = $_GET['lang']; } else if (!empty($_SESSION['lang'])) { $lang = $_SESSION['lang']; } else if ( empty($_SESSION['lang']) && empty($_GET['lang']) ) { $_SESSION['lang'] = autoSelectLanguage(array('en', 'fr'), 'fr'); } echo $lang; /*else { $lang = 'fr'; }*/ /*else if ( empty($_SESSION['lang']) && empty($_GET['lang']) ) { $lang = 'fr'; }*/ require("decide-lang.php"); ?> -
Il dois charger en premier la version qui est dans le cache du navigateur ce qui lui évite d'avoir à systématiquement tout recharger.
-
Et voici la réponse :
else if ( empty($_SESSION['lang']) && empty($_GET['lang']) ) { $_SESSION['lang'] = autoSelectLanguage(array('en', 'fr'), 'fr'); $lang = $_SESSION['lang']; }