ドキュメントを読んでGoogleで検索した後、あなたに尋ねなければなりません.
ca_ES、es_ES、en_GB の 3 つの言語を切り替えたい
そこで、次のようなコントローラーを作成しました。
/**
* @Route("/canviar-idioma/{locale}", name="change_lang")
* @Template()
*
* @return array
*/
public function canviarIdiomaAction($locale){
$request = $this->getRequest();
if ($locale == 'cat'){
$this->get('translator')->setLocale('ca_ES');
return new Response('ca');
} else if ($locale == 'es'){
$this->get('translator')->setLocale('es_ES');
return new Response('es');
} else if ($locale == 'eng'){
$this->get('session')->set('_locale', 'en_GB');
return new Response('en');
}
return new Response(null);
}
このコントローラーは、ユーザーが言語のフラグをクリックすると、ajax によって呼び出されます。「ca」または「es」または「en」を正しく受け取ったので、コントローラーは何らかの形で「機能」しています。ご覧のとおり、セッションで使用したり、翻訳者を取得したりしてみました。どちらの方法でも同じ結果になります。
しかし、ロケールが本当に変更されたかどうかを確認するために、このコントローラーを作成しました。
/**
* @Route("/quinlocaletinc", name="quinlocaletinc")
* @Template()
*
* @return array
*/
public function quinlocaletincAction(){
$request = $this->getRequest();
return new Response($request->getLocale());
}
そして、このロケールは常に「 ca_ES」を提供します。これは、パラメーターファイルで定義されているものです。
locale: ca_ES
そして私のconfig.yml:
default_locale: %locale%
translator: { fallback: %locale% }