Symfony2 falsche locale-Erkennung?
Folgenden Symfony2 Anleitung über übersetzung fand ich, dass die abgeleitete Angabe von http-Headern (gespeichert in $this->get('session')->getLocale()
) ist falsch (gesendet es, abgeleitet en):
Host localhost User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64;
rv:7.0.1) Gecko/20100101 Firefox/7.0.1
Accept text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language-es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Ist das ein normales Verhalten? Oder sollte ich etwas, um die Lokalisierung zu arbeiten out of the box?
Ich fand eine Methode mit dem Namen
ich kann den Bericht nicht den Fehler, wenn ich ' m nicht sicher, dies ist das falsche Verhalten...
man kann nie 100% sicher sein, und, da dieser nicht dokumentiert ist, einen bug-Report nicht so schlecht aus. Plus, werden Sie sicherlich eine Antwort bekommen (und eine gute) zu Ihrem problem. Nicht schüchtern sein! +1 für deine Frage
Es ist das richtige Verhalten. Die Standard-locale ist der in deiner config.yml, nicht die, die gesendet durch die browser.
Symfony\Component\HttpFoundation\Request::getPreferredLanguage()
, die aufgerufen werden soll, wenn dieser funktioniert, aber ich konnte nicht finden, dass jeder Aufruf dieser Funktion in den code. Ich denke, du solltest einen bug-report.ich kann den Bericht nicht den Fehler, wenn ich ' m nicht sicher, dies ist das falsche Verhalten...
man kann nie 100% sicher sein, und, da dieser nicht dokumentiert ist, einen bug-Report nicht so schlecht aus. Plus, werden Sie sicherlich eine Antwort bekommen (und eine gute) zu Ihrem problem. Nicht schüchtern sein! +1 für deine Frage
Es ist das richtige Verhalten. Die Standard-locale ist der in deiner config.yml, nicht die, die gesendet durch die browser.
InformationsquelleAutor gremo | 2011-10-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schaute ich genauer auf den code heute, weil ich erfahren hatte das selbe problem wie du, und es scheint, dass die Sprache kommt aus
Session::getLocale()
. Aber Symfony2 ruft nieSession::setLocale()
wird, und legt dielocale
Mitglied derSession
Objekt. Eine google-Suche nach "symfony2-Sitzung setlocale" führt zu dieser § der DokumentationSo landete ich setzen Sie diese Zeile auf der Oberseite des Controllers, an dem ich arbeitete, und es hat geklappt :
Nun denke ich, dass dies nicht akzeptabel ist, weil du nicht gehst, um dieses auf der Oberseite, die sich von jedem controller. Plus, dies sollte nicht getan werden, für jede Anforderung, es sollte nur durchgeführt werden, für die erste, wenn der Benutzer keine session noch. Wenn jemand weiß, wie Sie dies tun, fühlen Sie sich frei zu Bearbeiten, zu beantworten.
InformationsquelleAutor greg0ire
pro HTTP-Standard, sollten Sie über eine andere URL für jede übersetzte version der Seite. Was bleibt, ist eine einfache Maßnahme, ableiten, dass die best-to-use locale aus dem request und leitet Sie zur entsprechenden Seite:
wenn Sie müssen dies für jede Seite, die im Grunde müssen Sie das gleiche tun, aber innerhalb von ein Listener für das
kernel.request
-Event. Um zuverlässig aufgerufen wird, nachdem die route-matcher hat es funktioniert, sollten Sie diepriority
des Hörers auf einen Wert < 0:dem Zuhörer würde dann so Aussehen:
P. S. ich bin mir nicht ganz sicher, dass dieser code tatsächlich funktioniert, aber es sollte Ihnen eine grundlegende Idee, wie dieses getan werden könnte.
InformationsquelleAutor Martin Schuhfuß
Können Sie sich registrieren listener wie folgt:
(gist)
Nur nach framework session setup-Phase:
(gist)
InformationsquelleAutor Karol Kasprzak
Schrieb ich eine LocaleListener die nicht umleiten Sie auf eine locale-spezifische url, es hat jedoch die locale-Einstellungen für Sie 😉
Code in die Dienste.yml
und der eigentlichen listener:
InformationsquelleAutor Senči