Détection langue de l'internaute
Résolu/Fermé
Ifryona
-
9 sept. 2009 à 10:22
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 8 oct. 2009 à 14:34
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 8 oct. 2009 à 14:34
A voir également:
- Détection langue de l'internaute
- Telecharger langue arabe - Télécharger - Bureautique
- Detection materiel pc - Guide
- Changer langue facebook - Guide
- Changer langue windows 10 - Guide
- Changer langue archicad ✓ - Forum Architecture / décoration
12 réponses
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 655
9 sept. 2009 à 10:26
9 sept. 2009 à 10:26
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.
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 655
9 sept. 2009 à 10:54
9 sept. 2009 à 10:54
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.
arthezius
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
475
9 sept. 2009 à 10:55
9 sept. 2009 à 10:55
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
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 655
9 sept. 2009 à 10:57
9 sept. 2009 à 10:57
Non non, il ne faut pas se baser sur le User-Agent, mais sur le Accept-Language.
arthezius
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
475
9 sept. 2009 à 11:06
9 sept. 2009 à 11:06
Simple curiosité (après tout je connais pas trop ces truc là) mais le Accept_Language me donne:
En quoi ça va donc lui donner la langue donc utiliser par la visiteur ?
D'ailleurs il correspond à quoi le "0.8", "0.5" et "0.3" ?
fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
En quoi ça va donc lui donner la langue donc utiliser par la visiteur ?
D'ailleurs il correspond à quoi le "0.8", "0.5" et "0.3" ?
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 655
9 sept. 2009 à 11:11
9 sept. 2009 à 11:11
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.
arthezius
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
475
9 sept. 2009 à 11:13
9 sept. 2009 à 11:13
Ok, je comprends mieux du coup. Merci pour l'info.
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 655
9 sept. 2009 à 11:14
9 sept. 2009 à 11:14
De rien !
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 655
9 sept. 2009 à 11:17
9 sept. 2009 à 11:17
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"); ?>
arthezius
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
475
7 oct. 2009 à 17:13
7 oct. 2009 à 17:13
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']; }
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 655
8 oct. 2009 à 14:34
8 oct. 2009 à 14:34
Merci du suivi. Tes réponses aideront d'autres internautes.