Situation
ich auf einem Zuhörer auf kernel.request
wie diese hören locale bin Einstellung:Symfony2 locale für Basis Zweig Vorlage ignoriert
<?php
// ...
class LocaleListener
{
//...
public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
if (!$event->isMasterRequest()) {
return;
}
// [...] some logic to get $locale
$request->setLocale($locale);
}
}
?>
Dann habe ich zwei Zweig-Vorlagen, eine Basis und einen Base- Erweiterungs-Vorlage Basisvorlage (base.html.twig
):
<html>
<body>
{{ 'some.translation'|trans({}, 'messages') }}
{% block body %}{% endblock %}
</body>
</html>
und die Basis erstreckenden-Vorlage (profile.html.twig
):
{% extends '::base.html.twig' %}
{% block body %}
{{ 'some.translation'|trans({}, 'messages') }}
{% endblock %}
Der Controller der Route wird profile.html.twig machen:
<?php
// ...
class SomeController extends Controller
{
//...
public function someAction()
{
return $this->render('::profile.html.twig');
}
}
?>
Nichts besonderes, alles sehr einfach ...
Problem
Die gerenderte Vorlage, die die Basis erweitert (profile.html.twig
), verwendet das Gebietsschema für die im Listener eingestellte Übersetzung. Leider ist die Basisvorlage (base.html.twig
) NICHT. Selbst wenn ich {{ dump(app.request.locale) }}
auf der Basisvorlage dump, zeigt es das korrekte Gebietsschema im Hörer eingestellt ...
Was vermisse ich?
bearbeiten
Oh, und ich bin mit Symfony v2.7.11.
Könnte es ein Cache-Problem sein? Vielleicht versuchen Sie, 'app/cache/dev' und/oder' app/cache/prod' zu löschen. Überprüfen Sie in Bezug auf das Gebietsschema die Ereignispriorität. [Erstellen eines LocaleListener] (http://symfony.com/doc/current/cookbook/session/locale_sticky_session.html#creating-a-locallistener) besagt, dass Sie hier besonders vorsichtig sein müssen (siehe Zeile 36). – Yoshi
über die Priorität: Ihr Listener muss nach 'LocaleListener' und' TranslatorListener' registriert sein, also '<= 9' – Federkun