-1

Zend Framework a un excellent composant appelé Zend_Locale. Il y a toutes sortes de détails pour analyser correctement la langue et les paramètres régionaux, en partie parce qu'il a été piraté en HTTP Accept-Language header.Quelle est la meilleure façon d'extraire les paramètres régionaux définis par l'utilisateur à partir de Zend Framework en utilisant la liste complète des préférences de paramètres régionaux?

Dans le Zend Framework locale docs, il est dit:

Note: Sachez qu'il existe non seulement des endroits avec 2 personnages comme la plupart des gens pensent . En outre, il existe des langues et des régions qui ne sont pas seulement abrégé avec 2 caractères. Pour cette raison, vous ne devez PAS supprimer la région et la langue vous-même, mais utilisez Zend_Locale lorsque vous souhaitez supprimer la langue ou la région d'une chaîne locale . Sinon, vous pourriez avoir un comportement inattendu de votre code lorsque vous le faites vous-même.

Parfait. Sauf que j'ai testé différentes traductions. En supposant que vous naviguez avec Firefox, modifiez vos paramètres et ajoutez des profils language_region ... changez l'ordre par défaut. Vous verrez que Zend ne tire que la valeur par défaut. Les docs disent même si:

Si un utilisateur fournit plus d'un lieu au sein de son navigateur, Zend_Locale utilisera la première locale trouvée. Si l'utilisateur ne fournit pas de paramètres régionaux ou le script est appelé à partir de la ligne de commande , l'environnement local 'environnement' sera automatiquement utilisé et retourné .

Ceci est regrettable. Si vous avez 5 langues définies, vous voulez parcourir toutes les locales définies par l'utilisateur dans le navigateur et utiliser une langue qui correspond ...

Donc, ma question est, quelle approche adopteriez-vous pour analyser la liste complète et retirer les allumettes?

MISE À JOUR Il existe une méthode Zend_Locale :: getBrowser() qui retourne la liste complète. Génial! Je ne sais pas pourquoi Zend_Translate ne semble tirer que le premier. Je reviendrai après avoir vérifié comment cela fonctionne ... il faudra probablement construire le tableau de langs pour lequel vous avez des traductions et le comparer aux résultats de getBrowser() et tirer le premier match.

MAJ2 j'ai fait mettre en œuvre une solution, mais il est encore un peu hacky, parce que Zend_Translate et Zend_Locale ne sont pas petites petites classes. L'internationalisation est un sujet important, évidemment. Il y a un peu de recherche. Cependant, il s'agit essentiellement de vérifier la correspondance de chaque langue par rapport à la liste de préférences du navigateur.

Répondre

0

j'ai eu la forme d'approche http://www.zf-beginners-guide.com/ livre

protected function _initLocale() 
{ 
// try to auto-detect locale 
// if fail, set locale manually 
try { 
$locale = new Zend_Locale('browser'); 
} catch (Zend_Locale_Exception $e) { 
$locale = new Zend_Locale('en_GB'); 
} 
// register locale 
$registry = Zend_Registry::getInstance(); 
$registry->set('Zend_Locale', $locale); 
} 

mais ce que je crains, et il mentionne à propos de la mise à niveau des paramètres régionaux:

ATTENTION Il est important de noter que Zend_Locale pas jeter un exception si l'identificateur de paramètres régionaux détecté contient uniquement le code langue et non le code de région. Par exemple, certains environnements client et/ou serveur peuvent renvoyer simplement l'environnement local en ou fr. Cette situation peut parfois créer un problème lorsque Zend_Locale est utilisé avec d'autres classes prenant en charge les paramètres régionaux qui attendent un identificateur de paramètres régionaux complet, tel que Zend_Currency. Il n'y a pas de réelle solution à ce problème, à l'exception de définissant manuellement les paramètres régionaux en fonction des faits disponibles et une estimation «meilleure estimation» . A proposed new feature dans Zend_Locale, à l'avenir, permettre « la mise à niveau des paramètres régionaux, » dans laquelle partiellement identificateurs de paramètres régionaux qualifiés (pour exemple, en) seront automatiquement converties en locale complète identificateurs (par exemple, en_US).

par exemple dans Firefox si vous choisissez uniquement le code de langue [en] seulement, et que le code ci-dessus acceptera comme lieu mais les autres classes Aware locale jetteront une exception

après quelques essais j'ai eu trouvé pourcentage très élevé de personnes ne changent pas la langue par défaut du navigateur qui vous ferait plaisir :)

+0

Merci pour le lien. Un autre livre ZF. C'est génial! Re: la réponse ... Très peu de gens le changent, c'est vrai. Mais cela ne résout pas le problème que j'étais après lequel est si vous manquez la langue par défaut, pour analyser les langues secondaires trouvées dans Firefox. – joedevon