Symfony2.2 で奇妙な問題が発生しています。en/fr の 2 つの言語を使用するプロジェクトがあります。そこで、いつものように (Symfony2.0 と同じように) Ressources/Views/translations/ に "messages.en.yml" と "messages.fr.yml" という 2 つの翻訳ファイルを作成します。しかし、リクエスト オブジェクトとロケール セッションを設定しても、twig の翻訳は変更できませんでした。翻訳は常に default_locale (config.php) によって設定されます。
例 : default_locale = en の場合、fr (リクエストとセッション) で _locale オブジェクトを設定しても、(twig の) すべての Web サイトが en に翻訳されます。もちろん、手動で default_locale を fr に変更すると、Web サイトは当然 fr...
ただし、_localeセッションは機能しますが、ロケールリクエストが機能するかどうかはわかりません。もちろん、コントローラーでも翻訳が機能します...
私のファイルがあります:
config.yml:
framework:
#esi: ~
translator: { fallback: %locale% } # = en
# ...
default_locale: %locale% # = en
コントローラー:
public function indexAction()
{
$this->get('session')->set('_locale', 'fr');
$this->getRequest()->setLocale($lang);
exit($this->getRequest()->getLocale()); // = fr
exit($this->get('translator')->trans('Symfony2 is great')); // = Symfony2 est génial
return $this->render('TestBundle:Controller:test.html.twig');
意見 :
{% block content %}
<p>lang : {{ app.request.locale }}</p> {#} = "fr", OK{#}
<p>{{ 'Symfony2 is great'|trans }}</p> {#} = "Symfony2 is great", WAIT WHAT?{#}
メソッドコントローラーの先頭にあるロケールに、要求されたロケール (セッションに保存されている) をそのように強制するために、自分自身を辞任する必要があります。
コントローラ:
if($this->get('session')->get('_locale')){
$lang = $this->get('session')->get('_locale');
$this->getRequest()->setLocale($lang);
}
つまり、リクエストオブジェクトの登録に問題があります...最後のコードはコントローラーでうまく機能し、app.request.localeを使用してtwigページのロケールをうまく表示しますが、翻訳は表示しないため.. . (下手な英語で申し訳ありません。助けてくれてありがとう)