12
votes

Déterminer la langue du navigateur dans le cadre Zend?

Je dissoute une vieille bibliothèque assez grande avec diverses fonctions d'assistance PHP qui ont amassé au fil du temps. Je cherche des remplacements basés sur le cadre Zend pour autant de nombreuses de ces fonctions que possible.

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

ZF a-t-il une fonction pour cela?

Je réalise Zend_Translate est en mesure de détecter en quelque sorte le navigateur langue, mais je ne vois pas une fonction accessible au public pour obtenir la chaîne de langue.


0 commentaires

4 Réponses :


9
votes

zend_locale devrait être capable de aide, à propos de cela.

Voir les exemples et explications de la page Zend_locale (citant) :

Pour la plupart des situations, nouveau Zend_locale () sera automatiquement Sélectionnez la position locale correcte, avec Préférence donnée à l'information fourni par le navigateur Web de l'utilisateur.


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

L'algorithme de recherche utilisé par zend_locale pour la sélection automatique d'un local utilise trois sources de Information:

1. const Zend_Locale :: Navigateur - Le Web de l'utilisateur Le navigateur fournit des informations avec chacun demande, qui est publiée par php dans la variable globale http_accept_language . Si aucun correspondant Les paramètres régionaux peuvent être trouvés, puis préférentielles est donné à environnement et enfin cadre .

2. const Zend_locale :: Environnement - PHP publie la locale du serveur hôte via La fonction interne PHP SetLocale () . Si aucun paramètre local correspondant peut être trouvé, alors la préférence est donnée à framework et enfin navigateur .

3. const Zend_Locale :: Cadre - Quand Zend Cadre a une manière standardisée de Spécifier les valeurs par défaut des composants (planifié, mais pas encore disponible) , puis en utilisant cette constante pendant L'instanciation donnera la préférence à Choisir un local basé sur ces Par défaut. Si aucun paramètre local correspondant ne peut être trouvé, alors la préférence est donnée à environnement et enfin navigateur .

(Conseil: Allez lire cette page - Je ne copierai pas tout ce qu'il y a à lire ^^)


edit: et voici la partie du code qui illustre mon commentaire: xxx

me donne: xxx

Eh bien, mon navigateur demande français, sans spécifier une région ^^


5 commentaires

Cheers @pascal, à long terme, je pourrai travailler avec zend_locale . Pour le moment, je ne suis que remplacer la bibliothèque de fonctions d'assistance dans une application existante avec sa propre gestion des paramètres régionaux. J'ai donc besoin de saisir le code ISO réel.


Oh :-( Dommage :-( ;;;; Humph ... à ce sujet: Qu'en est-il de la première instance d'instanciation des paramètres régionaux, laissant Zf faire sa magie, puis appeler le getlanguage () GETREGION () Méthodes pour obtenir le code local?


J'ai édité ma réponse pour avoir une partie du code - mais je vois que je l'ai été battue par @Henchman ^^


Je vais accepter la réponse de @ Henchman alors qu'il vous a battue en quelques secondes, mais à l'acclamation @pascal. Cela fonctionne parfaitement, même avec des langues 100% non dans aucune liste de paramètres régionaux.


Pas de problème :-) Heureux que vous ayez votre solution :-)



11
votes

Vous allez ici:

$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();


2 commentaires

5
votes

2 commentaires

+1 pour le premier: même si c'est seulement disponible en PHP> = 5.3, l'utilisation de fonctions natifs est bonne (et les classes internationales sont une excellente ajout à PHP).


J'accepterai la réponse basée sur Zend parce que c'est ce que j'ai demandé, mais +1 parce que cela est vraiment agréable et même intégré - 5.3.0 est trop à poser maintenant mais ne sera pas dans une année. Acclamations.



1
votes

est-il une possibilité de forcer zend_locale () pour obtenir la première locale (code de langue et code de région, comme "EN_US") au lieu de simplement le code de langue ('fr')? Sinon, c'est un problème de gérer les devises car ils ont besoin d'une locale complète.

Comment gérez-vous ce problème? Je n'ai trouvé aucune solution acceptable pour ce problème encore et pour moi, il semble que cela devrait être une tâche pour zend_locale , dans _preparelocale ($ locale, $ strict = faux) Par exemple.


0 commentaires