6

我想在我的 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
4

2 回答 2

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);
于 2012-10-18T10:54:28.837 回答
1

你应该得到链接到你的 symfony 内核容器的翻译器实例:

$this->container->get('translator')->setLocale('fr');
于 2015-11-21T10:41:18.267 回答