Symfony2 locale-Erkennung: nicht in Betracht, _locale in der Sitzung
Ich versuche, die Implementierung eines LocaleListener, erkennt der Benutzer die bevorzugte Sprache (wenn man bedenkt, Accept-Language-header) und speichert es in der session zu vermeiden, überprüft es jede Anforderung. Ich habe entwickelt Sie den code unten, um das zu erreichen:
public function onKernelRequest(GetResponseEvent $event) {
$request = $event->getRequest();
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
return;
}
$preferredLocale = $request->getPreferredLanguage($this->availableLocales);
if ($this->container->has('session')) {
$session = $this->container->get('session');
if (!$session->has('_locale')) {
$session->set('_locale', $preferredLocale);
}
} else {
$request->setLocale($preferredLocale);
}
}
Dem code arbeitet, ist die bevorzugte Sprache gespeichert, die in der Sitzung, aber symfony ist nicht unter Berücksichtigung der locale gespeichert in der Sitzung um die Zeichenfolgen zu übersetzen. In meinem Fall, meine bevorzugte Sprache war, 'pt_BR', und wenn ich escape:
{{ app.request.locale }}
symfony entkommen ist 'de'. Sollte nicht symfony werden unter Berücksichtigung der gespeicherte Wert in der session('_locale') zu definieren request locale? Ist das ein korrektes Verhalten? Wie kann ich erreichen, dass?
InformationsquelleAutor Hugo Nogueira | 2013-05-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Arbeitssprache Zuhörer. die zweite Methode ist, um die Sprache zu ändern, um die Benutzer-Einstellungen, die der Benutzer wählt. Sie weglassen können, diese Methode, wenn Ihre Benutzer haben nicht die Möglichkeit zu definieren, Ihre Sprache.
in Ihre Dienste.yml:
Oh, und Sie haben zu definieren, undefined fallback_language in der config.yml zu arbeiten.
In meinem Projekt ist es kein problem. Ich habe dieses snippet auch aus einer anderen Quelle, aber ich kenne die url nicht mehr.. Können Sie es ändern können, nur die
_locale
in der Sitzung. In der Vergangenheit, als ich eingeführt wurde, es hatte nicht geklappt.$user->getLanguage()
ist einfach eine Sprache, die Feld in meiner Entität "Benutzer", 'Ursache, die meine Benutzer kann entscheiden, in welche Sprache zu verwenden, die webapplication, unabhängig von der Sprache des Browsers.InformationsquelleAutor Emii Khaos
Als von symfony 2.1, das Gebietsschema nicht in der session gespeichert, aber in der Anfrage. Was Sie tun können, um es zu lösen:
Bearbeiten Sie die LocaleListener speichern Sie das Gebietsschema in der Anfrage:
bitte beachten Sie, zitieren: "Wenn Sie dies tun, jede nachfolgende Anforderung haben, wird dieses Gebietsschema.", Und wir sprechen hier nicht über sub-Anfrage, machen wir das nicht? So wird es nicht funktionieren.
Ich habe es nicht erhalten. So bedeutet es, dass symfony nicht der Auffassung, der Schlüssel _locale in der Sitzung für weitere Anfragen?
Das Gebietsschema gespeichert ist, in der Anfrage und nicht in der Sitzung. Wenn Sie es speichern in die session, dass Gebietsschema verwendet für unteranfragen und nicht für die wichtigste Anforderung.
Es gibt einen Unterschied zwischen "Nachbestellung" und "unteranfragen". Ich denke, es ist etwas falsch, entweder in Symfony oder die Dokumentation, denn wenn ich die locale in der session, erwarte ich, dass jeder Antrag in dieser Sitzung zu haben, dass locale (nicht nur unteranfragen).
InformationsquelleAutor Wouter J