Détection langue de l'internaute
Résolu
Ifryona
-
sebsauvage Messages postés 32893 Date d'inscription Statut Modérateur Dernière intervention -
sebsauvage Messages postés 32893 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.
A voir également:
- Détection langue de l'internaute
- Changer langue windows 10 - Guide
- Telecharger langue arabe - Télécharger - Bureautique
- Detection materiel pc - Guide
- Changer langue facebook - Guide
- Touslesdrivers detection - Télécharger - Pilotes & Matériel
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.
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.
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.
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:
A toi de faire ensuite un script pour utiliser ça.
ç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.
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.
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 :
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.