Установить языковой стандарт в Symfony 2.1

Я пытаюсь использовать языковой коммутатор на моем сайте symfony 2.1.

Я выполнил официальную документацию , установил файлы перевода, но установил локаль с помощью $ request-> setLocale ('en_US'); похоже, не работает. После некоторых исследований я нашел этот вопрос, который дает начало ответа с помощью этой техники слушателя .

Тем не менее, мне все еще не удается заставить его работать, я не уверен в своей декларации слушателя, что-то не так с ним?

Мой контроллер:

public function englishAction(Request $request) { $this->get('session')->set('_locale', 'en_US'); return $this->redirect($request->headers->get('referer')); } 

Объявление сервиса в config.yml:

 services: my_listener: class: "FK\MyWebsiteBundle\Listener\LocaleListener" 

Моя маршрутизация:

 homepage: pattern: /{_locale} defaults: { _controller: FKMyWebsiteBundle:Default:index, _locale: en } requirements: _locale: en|fr|cn about: pattern: /{_locale}/about defaults: { _controller: FKMyWebsiteBundle:Default:about, _locale: en } requirements: _locale: en|fr|cn страница homepage: pattern: /{_locale} defaults: { _controller: FKMyWebsiteBundle:Default:index, _locale: en } requirements: _locale: en|fr|cn about: pattern: /{_locale}/about defaults: { _controller: FKMyWebsiteBundle:Default:about, _locale: en } requirements: _locale: en|fr|cn 

Объявление LocaleListener в yml (вдохновленное текущим объявлением нового LocaleListener: \ vendor \ symfony \ symfony \ src \ Symfony \ Bundle \ FrameworkBundle \ Resources \ config \ web.xml)

 services: my_listener: class: "FK\MyWebsiteBundle\Listener\LocaleListener" arguments: [%locale%] tags: - { name: kernel.event_subscriber } 

Некоторые фрагменты:

Языковой коммутатор в вашем шаблоне:

 {% for locale in ['en', 'fr', 'cn'] %} <li {% if locale == app.request.locale %}class="active"{% endif %}> <a href="{{ path(app.request.get('_route'), app.request.get('_route_params')|merge({'_locale' : locale})) }}">{{ locale }}</a> </li> {% endfor %} 

Перенаправление с изменением локали с контроллера:

 $LocalizedUrl = $this->get('router')->generate( $request->attributes->get('_route'), ['_locale' => $locale] + $request->attributes->get('_route_params') ); return new \Symfony\Component\HttpFoundation\RedirectResponse($LocalizedUrl); 

Вы должны получить экземпляр транслятора, связанный с вашим контейнером ядра symfony:

 $this->container->get('translator')->setLocale('fr');