状況
私はこのようなkernel.request
に聞いてリスナーにロケールを設定しています:Symfony2のロケール
<?php
// ...
class LocaleListener
{
//...
public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
if (!$event->isMasterRequest()) {
return;
}
// [...] some logic to get $locale
$request->setLocale($locale);
}
}
?>
その後、私は2つの小枝テンプレート、ベースとベース - を持っています拡張テンプレート。ベーステンプレート(base.html.twig
):
<html>
<body>
{{ 'some.translation'|trans({}, 'messages') }}
{% block body %}{% endblock %}
</body>
</html>
とベース延びるテンプレート(profile.html.twig
):
<?php
// ...
class SomeController extends Controller
{
//...
public function someAction()
{
return $this->render('::profile.html.twig');
}
}
?>
:
{% extends '::base.html.twig' %}
{% block body %}
{{ 'some.translation'|trans({}, 'messages') }}
{% endblock %}
経路のコントローラprofile.html.twigをレンダリングします
何も特別なものはなく、すべて非常に簡単です...
問題
ベースを拡張したレンダリングされたテンプレート(profile.html.twig
)は、リスナー内の翻訳セットのロケールを使用しています。残念ながら、基本テンプレート(base.html.twig
)はありません。 {{ dump(app.request.locale) }}
をベーステンプレートにダンプしても、リスナーに正しいロケールが設定されています。
私は何をすべきですか?
編集
ああ、私はsymfonyのv2.7.11を使用しています。
それはキャッシュの問題だろうか?おそらく、 'app/cache/dev'や' app/cache/prod'をクリアしてみてください。ロケールについては、イベント優先度を確認してください。 [LocaleListenerの作成](http://symfony.com/doc/current/cookbook/session/locale_sticky_session.html#creating-a-localelistener)には、ここでさらに注意する必要があることが述べられています(行番号36を参照)。 – Yoshi
優先順位について:あなたのリスナーは 'LocaleListener'と' TranslatorListener'の両方の後に登録されなければならないので、 '<= 9' – Federkun