Syb*_*bio 64 layout routing templates translation symfony
我在一个有两种语言的网站上使用Symfony 2,我想根据用户的语言环境改变我的路由模式!
例:
user_login_en:
pattern: /en/user/login.html
defaults: { _controller: SfErrorsAppBundle:User:login, _locale: en }
user_login_fr:
pattern: /fr/utilisateur/connexion.html
defaults: { _controller: SfErrorsAppBundle:User:login, _locale: fr}
Run Code Online (Sandbox Code Playgroud)
在模板内部,这并不困难,我只需要将$ this-> get('session') - > getLocale()从控制器传递给模板......
为了工作,我必须打电话给我的路线:
$router->generate('user_login_'.$locale, array());
Run Code Online (Sandbox Code Playgroud)
但在我的布局中,我当然有一个菜单和侧边栏,它们有链接......所以我想得到locale变量来使用它!所以我的问题很简单:如何在"布局"模板中获取此变量?否则,您是否有任何想法根据语言更改模式?
原因是我想为所有用户提供优美的路线,无论是英语还是法语......还有SEO的原因!
brk*_*rki 150
--- 评论的更新 ---
作为Symfony 2.1,你必须使用
{{ app.request.locale }}
Run Code Online (Sandbox Code Playgroud)
要么
{{ app.request.getLocale() }}
Run Code Online (Sandbox Code Playgroud)
app.request.locale如果可用app.request.defaultLocale则返回,如果app.request.locale未设置则返回.
ben*_*ske 105
由于Symfony 2.1将"语言环境"存储在请求而不是会话中,您必须使用此方法:
{{ app.request.getLocale() }}
Run Code Online (Sandbox Code Playgroud)
而不是app.session.locale
此外,您可能希望简化路由(一个规则):
user_login:
pattern: /{_locale}/user/login.html
defaults: { _controller: SfErrorsAppBundle:User:login }
如果您只想允许某些语言,则可以添加要求:
user_login:
pattern: /{_locale}/user/login.html
defaults: { _controller: SfErrorsAppBundle:User:login }
requirements:
_locale: fr|en