从浏览器或会话var自动本地化

时间:2015-12-28 06:26:24

标签: php symfony localization routing

我正在使用symfony2.8。我为几个lang(en | de | cz)制作了翻译yaml文件。然后我添加了路由要求:

(全球) app \ config \ routing.yml

comflex_w2:
    resource: "@ComflexW2Bundle/Resources/config/routing.yml"
    defaults: { _controller: ComflexW2Bundle:Home:index, _locale: en } 
    prefix:   /{_locale}
    requirements:
        _locale: en|de|cz

和内部包 src \ Comflex \ W2Bundle \ Resources \ config \ routing.yml

comflex_w2_home:
    pattern: /
    defaults: { _controller: ComflexW2Bundle:Home:index}


comflex_w2_login_check:
    path: /login_check
    defaults: { _controller: ComflexW2Bundle:User:authorization }

现在,当我转到主机/ web / app_dev.php / de ... / en ... / cz 然后转换工作,但当请求不包含 locale ,如 host / web / app_dev.php 时,我得到了

  

"找不到" GET /" 404错误

如何自动从会话文件(仅在用户登录后)或本地浏览器中设置URL中的语言环境,或者在没有人被记录时最终设置为en。

我在 app \ config \ config.yml 中找到了 default_locale:"%locale%" ,但是我不知道它是如何工作的以及"%locale%设置的位置。

1 个答案:

答案 0 :(得分:0)

您没有为' /'定义路线,这就是您收到此错误的原因。

当您在网址中使用区域设置前缀时,最好将用户重定向到/以区域设置为前缀的网址,例如, / EN /.

您应该添加一个匹配/并重定向到本地化主页的控制器:

public function redirectAction(Request $request)
{
    $locale = $request->getPreferredLanguage(['en', 'de', 'cz']);

    return $this->redirectToRoute('comflex_w2_home', ['_locale' => $locale], 301);
}