После прочтения документации и поиска ее с помощью Google я должен вас спросить.Язык интерфейса Symfony2 не работает должным образом
Я хочу, чтобы переключаться между 3-х языках: ca_ES, es_ES и en_GB
Так что я сделал контроллер, как это:
/**
* @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% }
см. Мой ответ на пример. – nifr
Итак, я думаю, что на каждом контроллере я должен установить эту аннотацию? Таким образом, все маршруты теперь изменились бы на .../ca? – Reinherd
Да, вам нужно будет поместить параметр _locale в каждый маршрут вашего приложения (ну и каждый маршрут, который нуждается в переводах) –