IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Détection de la langue du navigateur client : $_SERVER['HTTP_ACCEPT_LANGUAGE'] retourne toujours "fr" ou "en" [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ilalaina
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Par défaut Détection de la langue du navigateur client : $_SERVER['HTTP_ACCEPT_LANGUAGE'] retourne toujours "fr" ou "en"
    Bonjour.

    J'ai utilisé cette fonction pour détecter la langue du navigateur du client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    $navigatorLanguage = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
    $navigatorLanguage = strtolower(substr(chop($navigatorLanguage[0]),0,2));
    echo $navigatorLanguage;
    Ensuite pour tester j'ai téléchargé Opéra 11 en italien pour ne pas écraser l'installation de FF, mais j'obtiens toujours "fr" comme résultat. Si je change Opéra en Anglais il est bien affiché "en".

    Est-ce que c'est la façon la plus appropriée de détecter la langue ?
    Ou est-ce que c'est relié à mon OS?

    Merci de votre aide.

    PS : mon OS est Win7 en Français.

  2. #2
    Membre chevronné Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Par défaut
    Ré-essaye sous firefox avec le module "user agent switcher" tu pourras créer toi même tes entêtes et changer de langue sans à avoir à utiliser un autre navigateur. Peut-être opéra n'est finalement pas en italien. ^^"

  3. #3
    Membre éclairé Avatar de ilalaina
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Par défaut
    Citation Envoyé par radicaldreamer Voir le message
    Ré-essaye sous firefox avec le module "user agent switcher" tu pourras créer toi même tes entêtes et changer de langue sans à avoir à utiliser un autre navigateur.
    Merci pour le tuyau. Par contre je n'arrive pas à trouver où modifier la langue avec ce module

    Sinon, je crois peut-être savoir pourquoi "en" et "fr" sont détectés. C'est que je suis allé dans les options linguistiques et régionales dans les configs de mon ordi et il n'y a que les langues anglaises et français qui sont disponibles la dedans.

    Est-il possible que ce soit la cause de mon problème?

  4. #4
    Membre chevronné Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Par défaut
    Je ne pense pas que ça soit ça.

    Je me suis trompé de module complémentaire désolé. Utilise "modify headers"

    https://addons.mozilla.org/fr/firefo...-http-headers/ (non compatible firefox 4 pour le moment)

    Manipe:
    Tu vas sur ton site,
    tu ouvres live http headers,
    tu fais f5 sur ton site
    tu localises la premiere entete et tu fais "rejouer"

    là une fenetre s'affiche et tu modifies la ligne avec le code de langue en mettant ce que tu veux.

    Tu clic sur rejouer ou qqc du genre (de tête car le plugin ne fonctionne pas, suis passé sur ff4)

  5. #5
    Membre éclairé Avatar de ilalaina
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Par défaut
    J'ai fait les manips que radicaldreamer a montré et j'obtiens très bien "it" comme résultat.

    Mais je voudrais bien comprendre comment ça marche vraiment ce variable HTTP_ACCEPT_LANGUAGE : langue OS, la,gue navigateur ...
    J'apprécierai si quelqu'un pourrait m'éclairer.

    Merci d'avance.

  6. #6
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Hello

    Il existe une fonction toute prête pour ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
        function get_accepted_languages() {
            $httplanguages = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
            $languages = array();
            if (empty($httplanguages)) {
                return $languages;
            }
     
            foreach (preg_split('/,\s*/', $httplanguages) as $accept) {
                $result = preg_match('/^([a-z]{1,8}(?:[-_][a-z]{1,8})*)(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/i', $accept, $match);
     
                if (!$result) {
                    continue;
                }
                if (isset($match[2])) {
                    $quality = (float)$match[2];
                }
                else {
                    $quality = 1.0;
                }
     
                $countries = explode('-', $match[1]);
                $region = array_shift($countries);
                $country_sub = explode('_', $region);
                $region = array_shift($country_sub);
     
                foreach($countries as $country)
                    $languages[$region . '_' . strtoupper($country)] = $quality;
     
                foreach($country_sub as $country)
                    $languages[$region . '_' . strtoupper($country)] = $quality;
     
                $languages[$region] = $quality;
            }
     
            return $languages;
        }

  7. #7
    Membre éclairé Avatar de ilalaina
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Par défaut
    Merci de vos réponses rapides.

    J'ai aussi essayé la fonction get_accepted_languages().
    Le résultat :
    Array
    (
    [fr] => 0.8
    [fr_FR] => 0.8
    [en_US] => 0.5
    [en] => 0.3
    )
    Peut être que ma question est mal posée .
    Si je veux avoir :
    Array
    (
    [it] => 0.9
    [it_IT] => 0.9
    [fr] => 0.8
    [fr_FR] => 0.8
    [en_US] => 0.5
    [en] => 0.3
    )
    quelle doit être mon config :
    - dois-je mettre mon OS en Italien
    - dois-je installer un navigateur en italien
    ...

    Donc si l'utilisateur possède un OS en français et que son navigateur est en italien je ne pourrai jamais le détecter?

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Hello

    Il existe une fonction toute prête pour ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
        function get_accepted_languages() {
            $httplanguages = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
            $languages = array();
            if (empty($httplanguages)) {
                return $languages;
            }
     
            foreach (preg_split('/,\s*/', $httplanguages) as $accept) {
                $result = preg_match('/^([a-z]{1,8}(?:[-_][a-z]{1,8})*)(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/i', $accept, $match);
     
                if (!$result) {
                    continue;
                }
                if (isset($match[2])) {
                    $quality = (float)$match[2];
                }
                else {
                    $quality = 1.0;
                }
     
                $countries = explode('-', $match[1]);
                $region = array_shift($countries);
                $country_sub = explode('_', $region);
                $region = array_shift($country_sub);
     
                foreach($countries as $country)
                    $languages[$region . '_' . strtoupper($country)] = $quality;
     
                foreach($country_sub as $country)
                    $languages[$region . '_' . strtoupper($country)] = $quality;
     
                $languages[$region] = $quality;
            }
     
            return $languages;
        }
    y'a déjà une fonction pour ça : locale_accept_from_http

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Détection de la langue du navigateur via JS
    Par michaeljeru dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/03/2011, 11h05
  2. Réponses: 4
    Dernier message: 23/03/2011, 16h45
  3. [PHP-JS] Détection de la langue du navigateur
    Par nako dans le forum Langage
    Réponses: 4
    Dernier message: 28/02/2007, 14h13
  4. [JSP] Récupérer la langue du navigateur sans js
    Par Snivel dans le forum Struts 1
    Réponses: 2
    Dernier message: 31/03/2006, 18h56
  5. [Configuration] Détecter des paramètres du navigateur client...
    Par Olish dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 08/10/2005, 19h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo