在Symfony 2.1中设置语言环境

时间:2012-10-18 09:48:52

标签: php symfony locale symfony-2.1

我正在尝试在我的symfony 2.1网站上安装语言切换器。

我按照official documentation设置了翻译文件,但设置了区域设置为$ request-> setLocale(' en_US');似乎不起作用。经过一些研究,我发现this questionlistener 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

2 个答案:

答案 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');