我正在尝试在我的symfony 2.1网站上安装语言切换器。
我按照official documentation设置了翻译文件,但设置了区域设置为$ request-> setLocale(' en_US');似乎不起作用。经过一些研究,我发现this question为listener technique提供了答案的开头。
然而,我仍然没有设法让它发挥作用,我对我的听众声明不太确定,它有什么问题吗?
我的控制器:
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
答案 0 :(得分:9)
在yml中声明LocaleListener(受新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);
答案 1 :(得分:1)
您应该将翻译器实例链接到您的symfony内核容器:
$this->container->get('translator')->setLocale('fr');