我正在尝试使用Symfony将我的网站国际化。 这是我的routing.yml:
index:
pattern: /{_locale}
defaults: { _controller: AppBundle:Index:index, _locale: en }
requirements:
_locale: en|fr
当URL只是“/”时,会自动设置“en”语言环境,这很棒,但我想要浏览器语言环境。 例如,如果我在法国并输入“/”,我想重定向到“/ fr /”等。
你能帮助我吗?
答案 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)呈现文本。