Symfony2 mauvaise détection des paramètres régionaux?
Suivantes Symfony2 guide sur traduction j'ai trouvé que déduite des paramètres régionaux à partir des en-têtes http (stockées dans $this->get('session')->getLocale()
) est faux (envoyé ildéduit fr):
Hôte localhost User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64;
rv:7.0.1) Gecko/20100101 Firefox/7.0.1
Accepter text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language-il,elle;q=0.8,en-us;q=0.5,en;q=0.3
Est-ce un comportement normal? Ou dois-je mettre quelque chose dans le but d'obtenir la localisation de travail hors de la boîte?
source d'informationauteur gremo
Vous devez vous connecter pour publier un commentaire.
J'ai regardé plus en profondeur sur le code aujourd'hui, parce que j'étais en rencontrant le même problème que vous, et il semble que la langue vient de
Session::getLocale()
. Mais Symfony2 n'appelle jamaisSession::setLocale()
et définit lalocale
membre de laSession
objet. Une recherche google pour "symfony2 session setlocale" conduit à cet article § de la documentationJ'ai donc fini par mettre cette ligne en haut de la manette, j'ai été travailler sur, et il a travaillé :
Maintenant, je suppose que ce n'est pas acceptable, parce que vous n'allez pas à l'ajouter cela au dessus de chaque contrôleur. De Plus, ce ne doit pas être fait pour chaque demande, il ne doit être effectuée pour la première, lorsque l'utilisateur n'a pas de session encore. Si quelqu'un sait comment faire cela, n'hésitez pas à modifier cette réponse.
par HTTP-Standard, vous devriez être en utilisant une URL différente pour chaque version traduite de la page. Ce qui reste est une action simple qui permettra de déduire le meilleur à utiliser les paramètres régionaux à partir de la demande et de la rediriger vers la page correspondante:
si vous avez besoin de faire toute la page, vous aurez essentiellement besoin de faire de même, mais à l'intérieur d'un Écouteur pour l'
kernel.request
-Événement. Pour être fiable appelé après la route-comparateur de fait, c'est le travail, vous devez régler lepriority
de l'auditeur à une valeur < 0:l'auditeur ressemblerait alors à ceci:
P. S. je ne suis pas entièrement convaincu que ce code fonctionne réellement, mais cela devrait donner une idée de base sur la façon dont cela pourrait être fait.
Vous pouvez vous inscrire auditeur comme suit:
(gist)
Juste après le cadre de la session d'installation de la scène:
(gist)
J'ai écrit un LocaleListener qui n'est pas en vous redirigeant vers un jeu de paramètres régionaux url spécifique, il permet toutefois de définir les paramètres régionaux pour vous 😉
Code dans les services.yml
et le réel de l'auditeur: