Détection langue de l'internaute

Résolu
Ifryona -  
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.
Configuration: Windows XP
Firefox 3.0.13

12 réponses

  1. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    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
  2. Ifryona
     
    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
  3. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    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
  4. arthezius Messages postés 3756 Statut Membre 475
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    Non non, il ne faut pas se baser sur le User-Agent, mais sur le Accept-Language.
    0
    1. arthezius Messages postés 3756 Statut Membre 475
       
      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
  7. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    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
    1. arthezius Messages postés 3756 Statut Membre 475
       
      Ok, je comprends mieux du coup. Merci pour l'info.
      0
  8. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    De rien !
    0
  9. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
     
    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
  10. Ifryona
     
    Bonjour et merci pour toutes ces rapides réponses ! Je vais m'occuper de tester cela et je vous tiens au courant !
    0
  11. Ifryona
     
    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
  12. arthezius Messages postés 3756 Statut Membre 475
     
    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
    1. Ifryona
       
      A priori non car je vide le cache avant de lancer le site
      0
  13. Ifryona
     
    Et voici la réponse :

    else if ( empty($_SESSION['lang']) && empty($_GET['lang']) ) {
    		$_SESSION['lang'] = autoSelectLanguage(array('en', 'fr'), 'fr');
                   $lang = $_SESSION['lang'];
    	}
    
    0
    1. sebsauvage Messages postés 33284 Date d'inscription   Statut Modérateur Dernière intervention   15 684
       
      Merci du suivi. Tes réponses aideront d'autres internautes.
      0