【问题标题】:Changing locale with symfony 2.1使用 symfony 2.1 更改语言环境
【发布时间】:2012-08-27 17:03:32
【问题描述】:

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

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

通常,我想要一种简单的方法来更改请求(从 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 有关,但文档不是很清楚,感谢任何帮助/提示

【问题讨论】:

  • 我面临着完全相同的问题。请问你找到解决办法了吗?

标签: php symfony symfony-2.1


【解决方案1】:

我遇到了同样的问题,因为我们不能在我们的网址中使用语言环境(seo 问题)。我们还使用像 en_US 这样的语言环境,这些语言环境存储在直接框架访问之外的配置中。 我所做的是注册一个事件侦听器并连接到 onKernelRequest 事件。在那里我检查是否在会话中设置了语言环境,如果没有,我将它添加到请求和会话中。 这样,框架的行为就和 2.1 之前的一样 如果您需要有关如何执行此操作的更多信息,请发表评论,我将在此处编辑一些示例:-)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • @webda2I 我尝试了这个解决方案,但没有设法让它工作。创建了监听器,但似乎没有改变任何东西。你设法让它工作了吗?
    • 您是否在自己的 Bundle 中使用正确的命名空间创建它并在您的 service.xml 或其他文件中声明它?
    • @webda2I 我在这里问了一个新问题:stackoverflow.com/questions/12951792/set-locale-in-symfony-2-1,如果你能看看就好了
    【解决方案3】:

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

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

    【讨论】:

    • 感谢您的尝试,我也花了很长时间仔细阅读文档,但不幸的是,它根本不起作用。区域设置永远不会更改,或者始终设置回 default_locale。这实际上可能是一个错误,但是 symfony 2.1 版本还很年轻,所以我不知道,还有其他提示吗?
    猜你喜欢
    • 2012-12-25
    • 1970-01-01
    • 2012-11-03
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多