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
我正在我的 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