自动获取浏览器区域设置

时间:2015-08-29 17:23:06

标签: symfony locale

我正在尝试使用Symfony将我的网站国际化。 这是我的routing.yml:

index:
    pattern: /{_locale}
    defaults: { _controller: AppBundle:Index:index, _locale: en }
    requirements:
        _locale: en|fr

当URL只是“/”时,会自动设置“en”语言环境,这很棒,但我想要浏览器语言环境。 例如,如果我在法国并输入“/”,我想重定向到“/ fr /”等。

你能帮助我吗?

2 个答案:

答案 0 :(得分:2)

您可以获取客户端区域设置并在控制器中设置重定向

$clientLocale = strtolower(str_split($_SERVER['HTTP_ACCEPT_LANGUAGE'], 2)[0]);
switch ($clientLocale) {
    case 'fr':
        return $this->redirect($this->generateUrl('fr_route'));
    break;
    default:
        return $this->redirect($this->generateUrl('en_route'));
    break;
}

答案 1 :(得分:0)

基于b3da答案,我将仅将其应用于索引路径(因为我认为这是主要情况,当有人键入您的域没有参数时)并依赖于我的YML翻译:

#routing.yml
index:
    path: /
    defaults:
        _controller: AppBundle:Pub:index


index2:
    path: /{_locale}
    defaults:
        _controller: AppBundle:Pub:index



#PubController.php
public function indexAction($_locale=null, Request $request) {
    if (!$_locale) {
        $browserLocale = strtolower(str_split($_SERVER['HTTP_ACCEPT_LANGUAGE'], 2)[0]);
            return $this->redirect($this->generateUrl('index2', ['_locale' => $browserLocale]));
    }
    return $this->render('AppBundle::index.html.twig', []);
}

如果本地浏览器未在您的app / Resources / translation YML上翻译,那么它将使用您的后备区域设置(app / config / parameters.yml)呈现文本。