У меня странная проблема с Symfony2.2. У меня есть проект на двух языках: en/fr. Поэтому я создаю, как обычно (как в Symfony2.0), два файла перевода «messages.en.yml» и «messages.fr.yml» в Ressources/Views/translations/. Но переводы в twig не могли измениться, даже если мы установили объект запроса и сеанс локали. Перевод всегда задается default_locale (config.php).
Пример: если default_locale = en, весь мой веб-сайт (в ветке) переводится на en, даже если я устанавливаю объект _locale на fr (запрос и сеанс). Конечно, если я вручную изменю default_locale на fr, сайт, естественно, будет на 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, но не переводы.. , (извините за мой плохой английский и спасибо за помощь)