FOSUserBundle 路由中未使用 Symfony3 本地语言

Symfony3 local language not used in FOSUserBundle route

我正在我的 Symfony3 应用程序上实现翻译。我阅读了 the book 并在路线的开头实施了 _locale 变量。我还设置了从 //en 的重定向,并定义了翻译器后备。

除 FOSUserBundle 路由外,这一切正常。因为它们不是在我自己的路由上定义的,所以它们不关心 {_locale},并且当我访问它们时它们会重置为默认语言。 (/de/mypage => /profile => /en/mypage)

我的翻译文件存放在app/ressources/translations,我所有的翻译都是在twig端完成的。

app_localized:
    resource: "@AppBundle/Controller/"
    type:     annotation
    prefix:   /{_locale}

app:
    path: /
    defaults:
        _controller: FrameworkBundle:Redirect:urlRedirect
        path: /en
        permanent: true

我在书中看到建议在控制器中设置翻译,但就我而言,我得到了一些,并且认为在每个语言检查中重复进行语言检查没有什么价值。

我也考虑过在会话中存储 _locale 变量,并放置一个全局侦听器,但似乎有点太多了,所以我想我可能遗漏了一些东西。

那么,如何通过 URL 处理全球语言,包括在 FOSUserBundle 路由上,而不在每个控制器中重复代码?

其实我的FOSRout就是这样的。 fos_js_routing: 资源:“@FOSJsRoutingBundle/Resources/config/routing/routing.xml”

fos_user_security:
    resource: "@FOSUserBundle/Resources/config/routing/security.xml"
    prefix: /{_locale}
    requirements:
        _locale: '%app_locales%'

fos_user_profile:
    resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
    prefix: /{_locale}/profile
    requirements:
        _locale: '%app_locales%'

fos_user_register:
    resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
    prefix: /{_locale}/register
    requirements:
        _locale: '%app_locales%'

fos_user_resetting:
    resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
    prefix: /{_locale}/resetting
    requirements:
        _locale: '%app_locales%'

fos_user_change_password:
    resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
    prefix: /{_locale}/profile
    requirements:
        _locale: '%app_locales%'

您是否在 config.yml 文件的框架部分设置了这些参数:

framework:
    translator:      { fallbacks: ["%locale%"] }
    default_locale:  "%locale%"

并且您还需要在 routing.yml 文件中为 FOSUserBundle 路由添加前缀,如下所示:

fos_user_security:
    resource: "@FOSUserBundle/Resources/config/routing/security.xml"
    prefix: /{_locale}/
    requirements:
        _locale: en|fr
fos_user_profile:
    resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
    prefix: /{_locale}/profile
fos_user_register:
    resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
    prefix: /{_locale}/register
fos_user_resetting:
    resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
    prefix: /{_locale}/resetting
fos_user_change_password:
    resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
    prefix: /{_locale}/profile