【问题标题】:Symfony3 local language not used in FOSUserBundle routeFOSUserBundle 路由中未使用 Symfony3 本地语言
【发布时间】:2016-06-24 15:18:31
【问题描述】:

我正在我的 Symfony3 应用上实现翻译。我阅读了the book 并在我的路线开始处实现了_locale var。我还设置了从/ 到/en 的重定向,并定义了翻译后备。

这是按预期工作的,除了 FOSUserBundle 路由。由于它们不是在我自己的路由中定义的,因此它们不会处理 {_locale},并且当我访问它们时它们会重置为默认语言。 (/de/mypage => /profile => /en/mypage)

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

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

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

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

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

那么,如何通过 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%'

【问题讨论】:

    标签: translation fosuserbundle symfony


    【解决方案1】:

    您是否在 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
    

    【讨论】:

    • 是的,我实现了 fallback 和 default_locale 参数。关于路线,我试过了,但我仍然遇到问题。当我尝试更改当前语言时同样适用
    • 是否可以使用 FOSUser 路由查看所有 routing.yml ?
    • 好的,我明白了。尝试使用诸如 en|fr|de 之类的值(例如)而不是 %app_locales%。也许您的路由文件无法处理您的 parameters.yml 文件中的变量
    • %app_locales% = en|fr|de。工作正常,除了路由。我设法使用 LocaleListener 解决了这个问题,但是,imo 仍然有点过度编码:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 2012-11-25
    • 1970-01-01
    • 2014-09-15
    相关资源
    最近更新 更多