如何在 Symfony 布局中获取 _locale 变量?
我正在使用 Symfony 2 在一个有 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}
在模板内,这并不困难,我只需将 $this->get('session')->getLocale() 从控制器传递到模板...
要工作,我必须调用我的路线:
$router->generate('user_login_'.$locale, array());
但是在我的布局中,我当然有一个菜单和侧边栏,其中有链接...所以我想获取区域设置变量来使用它!所以我的问题很简单:如何在“布局”模板中获取此变量?否则,您有什么想法根据语言改变模式吗?
原因是我希望为所有用户提供漂亮的路线,无论他们是英语还是法语......而且也是出于 SEO 的原因!
I'm working with Symfony 2 on a site which having 2 languages,
and I want to change patterns of my routes depending on user locale language !
Example:
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}
Inside a template, this is not difficult, i just have to pass the $this->get('session')->getLocale() from the controller to the template...
To work, I have to call my routes:
$router->generate('user_login_'.$locale, array());
But inside my layouts, I have of course a menu, and sidebars, which have links... So I want to get the locale variable to use it ! So my question is simple: how to get this variable inside a "layout" template ? Otherwise, have you got any idea to change the pattern depending on the language ?
The reasons are that I want beautiful routes for all users, whether they're english or french... And also for a SEO reason !
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
---从评论中更新---
作为 Symfony 2.1,您必须使用
or
返回
app.request.locale
(如果可用)和app.request.defaultLocale
如果app.request.locale
未设置。---UPDATED FROM THE COMMENTS---
As Symfony 2.1, you must use
or
which returns
app.request.locale
if available andapp.request.defaultLocale
ifapp.request.locale
is not set.由于 Symfony 2.1 将“区域设置”存储在请求中而不是会话中,因此您必须使用以下命令:
而不是 app.session.locale
As Symfony 2.1 stores the "locale" in the Request instead of the session you have to use this:
instead of app.session.locale
另外,您可能想简化路由(一条规则):
如果您只想允许某些语言,您可以添加一项要求:
Also, you might want to simplify your routing (one single rule):
If you want to allow only some languages you can add a requirement:
在我看来,这是自动检测语言环境的最简单且可维护的方法,而不必担心 Symfony 版本:
此外,如果您愿意,您可以使用对象类似 Twig 模板引擎中的符号:
参见 Symfony 2.1.0 发行说明 了解更多信息
In my opinion, this is the most easy and maintenable way to autodetect the locale without worrying for Symfony version:
Also, if you prefer it you can use a object like notation in Twig template engine:
See Symfony 2.1.0 release notes for more info