Symfony2根据浏览器的配置在主页中设置_locale

时间:2013-05-08 16:59:06

标签: symfony localization translation

我的本​​地工作在我的网站上无处不在,但我无法告诉应用程序设置应用程序根目录的正确本地。

例如:

如果我的网站是http://mycompany.com,我希望这样,当我输入此地址时,应用程序猜测我的本地是什么,并将其设置在网址的末尾 http://mycompany.com/en如果本地存在于我的应用程序中。这是enfr,如果不是默认en

现在当我去主页时,我总是得到英文版,但我的浏览器是用法语设置的

routing.yml:

_welcome:
    pattern:  /{_locale}
    defaults: { _controller: MyBundle:Default:landing, _locale: en }
    requirements:
        _locale: en|fr

2 个答案:

答案 0 :(得分:1)

几天前查看此question并查看语言监听器中的第一个方法。它完全符合您的需求。并在config.yml

中处理正确的设置

答案 1 :(得分:1)

在与locale和symfony2相关的许多其他问题的帮助下,我终于得到了我想要的东西!我想这不是完美的答案,但至少它有效!

我的登陆操作在我的路由中定义为_welcome路由。当我转到url的根目录时,会加载此操作。

     /**
     * @Route("/landing")
     * @Template()
     */
    public function landingAction() {

        $localeAvailable = array('en', 'fr');
        //user language
        $localeUser = substr($this->getRequest()->getPreferredLanguage(), 0, 2);
        //application language
        $localeApp = $this->getRequest()->attributes->get('_locale');

        //Redirect to the good locale page 
        //only if the locale user is on our manager locale and it is not the current locale of the application
        if(in_array($localeUser, $localeAvailable) && $localeApp!=$localeUser){
            return $this->redirect($this->generateUrl("_welcome", array('_locale' => $localeUser)));
        }

        return array();
    }