-->

用symfony 2.1更改地区(Changing locale with symfony 2.1)

2019-06-27 11:01发布

有一些问题,改变在symfony的2.1网站的语言环境。

我不能找到一种方法,能够改变郎不使用_locale每路线上。 我知道这是违反基本规则 ,但这些内容将例如不引擎检索到,因为它是唯一成员。

通常情况下,我想一个简单的方法能够改变对请求的语言环境(从2.1版本BC),或在会话,但无法弄清楚如何做到这一点的顺利进行。 我也想避免使用该监听器的。

config.yml文件:

framework:
    translator:      { fallback: %locale% }
    session:

使用routing.yml文件:

route_change_lang:
    pattern:   /changelang/{newlang}
    defaults:  { _controller: AcmeCoreBundle:Default:switchLanguage, newlang: en }
    requirements:
        newlang: en|fr|de

简单的动作来更新路由器的语言环境:

public function switchLanguageAction($newlang)
{

    $request = $this->getRequest();

    $request->setLocale($newlang);

    $referer_url = $this->get('request')->headers->get('referer');
    if ($referer_url != null) {
        return $this->redirect($referer_url);
    } else {
        return $this->redirect($this->generateUrl('route_home'));
    }
}

问题是什么? 我估计它关系到在主config.yml文件中设置的DEFAULT_LOCALE,但文件是真不明白,任何帮助/提示赞赏

Answer 1:

我遇到了同样的问题,因为我们在我们的网址(搜索引擎优化问题)不能”使用的语言环境。 此外,我们使用像EN_US语言环境和那些存储在直接访问框架之外的配置。 我所做的是注册一个事件侦听器和钩住onKernelRequest事件。 在那里,我检查,如果语言环境中的会话设置,如果没有,我把它添加到两个,请求和会话。 通过这种方式,框架不断表现就像它之前2.1没有如果您需要关于如何做到这一点的详细信息,评论,我会在这里编辑一些exaples :-)



Answer 2:

恢复旧的行为作为解释https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md#httpfoundation-1并使用一块卡洛斯·格拉纳多斯的代码。

您还可以阅读我的另一个答案https://stackoverflow.com/a/12952999/520114



Answer 3:

如果您在请求中设置的语言环境,这只是用于当前的请求。 即发出请求,在下一次的DEFAULT_LOCALE将被使用。 即使现在(2.1)的语言环境中请求而不是会议确定,“这也可以在区域设置存储在会话中,而不是在每个请求的基础。如果你这样做,以后每次申请都会有这样的语言环境“。 (从文档)。 所以,你需要做的:

$this->get('session')->set('_locale', $newlang);


文章来源: Changing locale with symfony 2.1