2010-03-06 7 views
12

Je suis en train de dissoudre une vieille bibliothèque assez grosse avec diverses fonctions d'aide PHP qui se sont accumulées au fil du temps. Je suis à la recherche de remplacements basés sur Zend Framework pour autant de ces fonctions que possible.Déterminer la/les langue (s) du navigateur dans Zend Framework?

Mon premier candidat est une fonction qui renvoie la langue du navigateur préférée des utilisateurs de l'énorme liste qui peut être http_accept_language.

Est-ce que ZF a une fonction pour ça?

Je réalise Zend_Translate est capable de détecter en quelque sorte la langue du navigateur, mais je ne vois pas une fonction publique pour obtenir la chaîne de langue.

Répondre

11

ici vous allez:

$locale = new Zend_Locale(); 

// if locale is 'de_AT' then 'de' will be returned as language 
print $locale->getLanguage(); 

// if locale is 'de_AT' then 'AT' will be returned as region 
print $locale->getRegion(); 
+0

Que se passe-t-il si la préférence est seulement "en" ou "es"? http://stackoverflow.com/questions/16469629/zend-locale-zend-currency-region-code – Michelangelo

+0

J'ai directement répondu à votre question. –

9

Zend_Locale devrait être en mesure d'aider, à ce sujet.

Voir les exemples et explications sur la page Using Zend_Locale(citant):

Pour la plupart des situations, new Zend_Locale() sera automatiquement sélectionnez les paramètres régionaux correct, avec préférence donnée à l'information fournies par le web de l'utilisateur navigateur.


Et il y a deux plus de détails plus tard sur cette page (citant):

L'algorithme de recherche utilisé par Zend_Locale pour la sélection automatique d'une locale utilise trois sources de information:

1.const Zend_Locale::BROWSER - Le navigateur Web de l'utilisateur fournit des informations avec chaque demande, qui est publié par PHP dans la variable globale HTTP_ACCEPT_LANGUAGE. si aucun locale correspondant peut être trouvé, alors la préférence est donnée à ENVIRONMENT et enfin FRAMEWORK.

2.const Zend_Locale::ENVIRONMENT - PHP publie la localisation du serveur hôte via la fonction interne PHP setlocale(). Si aucun local correspondant peut être trouvé, alors la préférence est donnée à FRAMEWORK et enfin BROWSER.

3.const Zend_Locale::FRAMEWORK - Lorsque Zend Framework a une façon standardisée de spécifiant les valeurs par défaut des composants (prévu, mais pas encore disponible), puis en utilisant cette constante pendant instanciation donnera la préférence à une locale à base sur ces par défaut. Si aucun paramètre régional correspondant ne peut être trouvé, la préférence est donnée à ENVIRONMENT et enfin BROWSER.

(Conseil: allez lire cette page - Je ne vais pas tout copier-coller, il est à lire ^^)


Edit: Et voici la partie du code qui illustre mon Commentaire:

$locale = new Zend_Locale(); 
var_dump($locale->getLanguage()); 
var_dump($locale->getRegion()); 
die; 

Donne-moi:

string(2) "fr" 
bool(false) 

Eh bien, mon navigateur réclame français, sans préciser une région ^^

+0

À la vôtre @Pascal, à long terme, je serai capable de travailler avec 'Zend_Locale'. Pour l'instant, cependant, je remplace juste la bibliothèque de fonctions d'aide dans une application existante avec sa propre gestion de locale, ainsi j'ai besoin d'obtenir le code ISO réel. –

+0

Oh :-(dommage :-(;;; humph ... thiking à ce sujet: qu'en est-il d'instanciation d'abord les paramètres régionaux, laissant ZF faire sa magie, puis en appelant les 'getLanguage()' et/ou 'getRegion() –

+0

J'ai édité ma réponse pour obtenir une partie du code - mais je vois que j'ai été battue par @henchman ^^ –

5

J'ai upvoted les deux réponses. Comme alternative à obtenir la langue avec Zend_Locale envisager

+1

+1 pour le premier: même s'il n'est disponible qu'en PHP> = 5.3, l'utilisation des fonctions natives est bonne * (et les classes intl sont un excellent ajout à PHP). * –

+1

J'accepterai la réponse basée sur Zend parce que c'est ça J'ai demandé, mais +1 parce que c'est vraiment agréable et même intégré - 5.3.0 est trop demander maintenant mais pas dans un an. À votre santé. –

1

Est-il possible de forcer Zend_Locale() pour obtenir la première complète locale (code de la langue et le code régional, comme 'en_US') au lieu de simplement le code de langue ('en')? Si ce n'est pas le cas, c'est un problème de gérer les devises car elles ont besoin d'un environnement local complet.

Comment gérez-vous ce problème? Je n'ai pas encore trouvé de solution acceptable pour ce problème et pour moi, il semble que cela devrait être une tâche pour Zend_Locale, en _prepareLocale($locale, $strict = false) par exemple.