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
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.
A voir également:

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
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.
0
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.
0
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
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.
0
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
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.
0

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
Non non, il ne faut pas se baser sur le User-Agent, mais sur le Accept-Language.
0
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
Simple curiosité (après tout je connais pas trop ces truc là) mais le Accept_Language me donne:
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" ?
0
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
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.
0
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
Ok, je comprends mieux du coup. Merci pour l'info.
0
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
De rien !
0
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
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.
0
Bonjour et merci pour toutes ces rapides réponses ! Je vais m'occuper de tester cela et je vous tiens au courant !
0
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"); 
	
?> 
0
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
Il dois charger en premier la version qui est dans le cache du navigateur ce qui lui évite d'avoir à systématiquement tout recharger.
0
A priori non car je vide le cache avant de lancer le site
0
Et voici la réponse :

else if ( empty($_SESSION['lang']) && empty($_GET['lang']) ) {
		$_SESSION['lang'] = autoSelectLanguage(array('en', 'fr'), 'fr');
               $lang = $_SESSION['lang'];
	}
0
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
Merci du suivi. Tes réponses aideront d'autres internautes.
0