我尝试使用{_locale}
作为前缀来定义我的网站的路由,因此会有以下路由:
我的第一个问题是将{_locale}
定义为前缀使其成为必需的,并且路由mysite.com/about-us不会起作用。目前以这种方式定义:
#Acme/WebBundle/Resources/config/routing.yml
app_about_us:
path: /{_locale}/about-us
defaults: { _controller: AcmeWebBundle:Static:aboutUs, _locale: es}
requirements:
_locale: es|en
#app/config/routing.yml
Acme_web:
resource: "@AcmeWebBundle/Resources/config/routing.yml"
prefix: /
此外,我不希望我的路线显示{_locale}
,以便有人输入:
最后,如果有任何方法可以为所有网站全局设置前缀,而不是将其放在每条路线上,那就太棒了。
答案 0 :(得分:0)
好的,首先,您可以为整个应用程序设置default locale
# app/config/config.yml
framework:
default_locale: en
第二 - 这样做,你可以声明两条路线:
app_about_us:
path: /{_locale}/about-us
defaults: { _controller: AcmeWebBundle:Static:aboutUs}
requirements:
_locale: es|en
app_about_us_locale:
path: /about-us
defaults: { _controller: AcmeWebBundle:Static:aboutUs, _locale: es}
我不确定是否有可能以不同的方式进行,而无需额外的捆绑,事件等......
其他方式
您可以设置会话区域设置 - here is example to make locale sticky。 这样您就可以创建正常路由,而不使用参数。那么如何设置新的会话区域设置?创建特殊路由以设置新的区域设置并重定向到原始页面。
app_set_locale:
path: /{_locale}/
defaults: { _controller: AcmeWebBundle:Locale:setLocale}
locale
和重定向到上一页阅读有关路由,区域设置,翻译的Symfony文档 - 也许您会发现一些有趣的内容:)