Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/03/2011, 14h40   #1
Membre habitué
 
Avatar de ilalaina
 
Homme Ilalaina Rasoloarison
Inscription : mai 2007
Messages : 330
Détails du profil
Informations personnelles :
Nom : Homme Ilalaina Rasoloarison
Localisation : Madagascar

Informations forums :
Inscription : mai 2007
Messages : 330
Points : 129
Points : 129
Envoyer un message via Yahoo à ilalaina Envoyer un message via Skype™ à ilalaina
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 :
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.
__________________
" ... On naît, on vit, on meurt, mais exister est un honneur ... "
ilalaina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 14h50   #2
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

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

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
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. ^^"
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 15h49   #3
Membre habitué
 
Avatar de ilalaina
 
Homme Ilalaina Rasoloarison
Inscription : mai 2007
Messages : 330
Détails du profil
Informations personnelles :
Nom : Homme Ilalaina Rasoloarison
Localisation : Madagascar

Informations forums :
Inscription : mai 2007
Messages : 330
Points : 129
Points : 129
Envoyer un message via Yahoo à ilalaina Envoyer un message via Skype™ à ilalaina
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?
__________________
" ... On naît, on vit, on meurt, mais exister est un honneur ... "
ilalaina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 15h54   #4
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

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

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
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)
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 16h48   #5
Membre habitué
 
Avatar de ilalaina
 
Homme Ilalaina Rasoloarison
Inscription : mai 2007
Messages : 330
Détails du profil
Informations personnelles :
Nom : Homme Ilalaina Rasoloarison
Localisation : Madagascar

Informations forums :
Inscription : mai 2007
Messages : 330
Points : 129
Points : 129
Envoyer un message via Yahoo à ilalaina Envoyer un message via Skype™ à ilalaina
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.
__________________
" ... On naît, on vit, on meurt, mais exister est un honneur ... "
ilalaina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 16h54   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Hello

Il existe une fonction toute prête pour ça:
Code :
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;
    }
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 17h13   #7
Membre habitué
 
Avatar de ilalaina
 
Homme Ilalaina Rasoloarison
Inscription : mai 2007
Messages : 330
Détails du profil
Informations personnelles :
Nom : Homme Ilalaina Rasoloarison
Localisation : Madagascar

Informations forums :
Inscription : mai 2007
Messages : 330
Points : 129
Points : 129
Envoyer un message via Yahoo à ilalaina Envoyer un message via Skype™ à ilalaina
Merci de vos réponses rapides.

J'ai aussi essayé la fonction get_accepted_languages().
Le résultat :
Citation:
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 :
Citation:
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?
__________________
" ... On naît, on vit, on meurt, mais exister est un honneur ... "
ilalaina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 17h23   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par Benjamin Delespierre Voir le message
Hello

Il existe une fonction toute prête pour ça:
Code :
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 30/03/2011, 17h52   #9
Membre habitué
 
Avatar de ilalaina
 
Homme Ilalaina Rasoloarison
Inscription : mai 2007
Messages : 330
Détails du profil
Informations personnelles :
Nom : Homme Ilalaina Rasoloarison
Localisation : Madagascar

Informations forums :
Inscription : mai 2007
Messages : 330
Points : 129
Points : 129
Envoyer un message via Yahoo à ilalaina Envoyer un message via Skype™ à ilalaina
Citation:
Envoyé par stealth35 Voir le message
y'a déjà une fonction pour ça : locale_accept_from_http
mais avec cette fonction il faut installer une autre bibliothèque : http://www.php.net/manual/fr/intl.requirements.php

En fait c'est l’interaction de ces fonctions la avec le browser et l'OS que je cherche à comprendre ...
__________________
" ... On naît, on vit, on meurt, mais exister est un honneur ... "
ilalaina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 18h02   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par ilalaina Voir le message
mais avec cette fonction il faut installer une autre bibliothèque : http://www.php.net/manual/fr/intl.requirements.php

En fait c'est l’interaction de ces fonctions la avec le browser et l'OS que je cherche à comprendre ...
c'est fait avec la valeur de $_SERVER['HTTP_ACCEPT_LANGUAGE']
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 30/03/2011, 19h14   #11
Membre habitué
 
Avatar de ilalaina
 
Homme Ilalaina Rasoloarison
Inscription : mai 2007
Messages : 330
Détails du profil
Informations personnelles :
Nom : Homme Ilalaina Rasoloarison
Localisation : Madagascar

Informations forums :
Inscription : mai 2007
Messages : 330
Points : 129
Points : 129
Envoyer un message via Yahoo à ilalaina Envoyer un message via Skype™ à ilalaina
Je dois peut-être répéter ma question
Citation:
Envoyé par ilalaina Voir le message

Peut être que ma question est mal posée .
Si je veux avoir :

Citation:
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?
__________________
" ... On naît, on vit, on meurt, mais exister est un honneur ... "
ilalaina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 19h46   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Ça dépend que du navigateur, après peu être qu'aussi le navigateur détecte la langue de l'OS pour la valeur par défaut.
En cas c'est pas PHP qui gère ça, et ça vient uniquement du navigateur

dans firefox tu peux changer ca : dans about:config, avec l’attribut : intl.accept_languages, change la valeur tu verras
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 31/03/2011, 08h34   #13
Membre habitué
 
Avatar de ilalaina
 
Homme Ilalaina Rasoloarison
Inscription : mai 2007
Messages : 330
Détails du profil
Informations personnelles :
Nom : Homme Ilalaina Rasoloarison
Localisation : Madagascar

Informations forums :
Inscription : mai 2007
Messages : 330
Points : 129
Points : 129
Envoyer un message via Yahoo à ilalaina Envoyer un message via Skype™ à ilalaina
Ok, je commence à y voir clair.
Je vous remercie tous pour votre aide.
__________________
" ... On naît, on vit, on meurt, mais exister est un honneur ... "
ilalaina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 10h07   #14
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
@Stealth35

L'emploi de la fonction locale_accept_from_http demande PHP 5 >= 5.3.0, PECL intl >= 1.0.0. On a pas tous le luxe d'avoir cet environement en prod
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 10h18   #15
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par Benjamin Delespierre Voir le message
@Stealth35

L'emploi de la fonction locale_accept_from_http demande PHP 5 >= 5.3.0, PECL intl >= 1.0.0. On a pas tous le luxe d'avoir cet environement en prod
Intl existe depuis longtemps,
De plus la branche PHP 5.2 est finis et Debian est passé 5.3
Toujours montrer en premier ce qui est le plus moderne, ensuite on peux descendre dans le temps
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 31/03/2011, 11h15   #16
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
Toujours montrer en premier ce qui est le plus moderne, ensuite on peux descendre dans le temps
Pas faux mais je me place dans une logique d'hébergement mutualisé la plupart du temps et leurs serveur en sont resté à 5.2 pour l'instant.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 11h46   #17
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par Benjamin Delespierre Voir le message
Pas faux mais je me place dans une logique d'hébergement mutualisé la plupart du temps et leurs serveur en sont resté à 5.2 pour l'instant.
je comprend bien
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h32.


 
 
 
 
Partenaires

Hébergement Web