6

在 symfony 2.1 网站上更改语言环境时遇到一些问题。

_locale如果不在每条路线上使用 ,我就找不到能够更改语言的方法。我知道这违反了基本规则,但是这个内容例如不会被引擎索引,因为它只是成员。

通常,我想要一种简单的方法来更改请求(从 2.1 版开始的 BC)或会话中的语言环境,但不知道如何顺利​​地做到这一点。我也想避免为此使用监听器。

config.yml 文件:

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

路由.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 有关,但文档不是很清楚,感谢任何帮助/提示

4

3 回答 3

1

我遇到了同样的问题,因为我们不能在我们的网址中使用语言环境(seo 问题)。我们还使用像 en_US 这样的语言环境,这些语言环境存储在直接框架访问之外的配置中。我所做的是注册一个事件侦听器并连接到 onKernelRequest 事件。在那里我检查是否在会话中设置了语言环境,如果没有,我将它添加到请求和会话中。这样,框架的行为将保持与 2.1 之前一样

于 2012-10-16T14:38:40.917 回答
0

按照https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md#httpfoundation-1中的说明恢复旧行为 并使用 Carlos Granados 的代码。

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

于 2012-08-29T13:35:34.207 回答
-1

如果您在请求中设置语言环境,则仅用于当前请求。下次发出请求时,将使用 default_locale。即使现在(2.1)在请求而不是会话中设置了语言环境,“也可以将语言环境存储在会话中而不是基于每个请求。如果这样做,每个后续请求都将具有此语言环境。” (来自文档)。所以,你需要这样做:

$this->get('session')->set('_locale', $newlang);
于 2012-08-27T17:59:11.927 回答