如何处理用户的语言环境
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 3.4,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
如何处理用户的语言环境
当前用户的语言环境是存储在请求,并通过访问请求
对象:
1 2 3 4 5 6
使用ob娱乐下载\组件\HttpFoundation\请求;公共函数indexAction(请求美元请求){美元语言环境=美元请求- >getLocale ();}
设置用户的语言环境,您可能想要创建一个自定义事件侦听器,以便它之前设置系统的其他部分(即译者)需要:
1 2 3 4 5 6 7
公共函数onKernelRequest(GetResponseEvent美元事件){美元请求=美元事件- >getRequest ();/ /一些逻辑来确定美元的地区美元请求- >setLocale (美元语言环境);}
请注意
必须调用自定义侦听器之前LocaleListener
,初始化地区基于当前请求。为此,设置监听器优先级更高的价值比LocaleListener
优先级(您可以获得运行调试:事件kernel.request
命令)。
读使语言环境在用户会话期间“粘性”有关更多信息,让用户的会话地区“粘性”。
请注意
设置语言环境使用$请求- > setLocale ()
在控制器已经太晚了影响翻译。通过侦听器可以设置语言环境(如上图),(见下)或调用的URLsetLocale ()
直接在翻译
服务。
看到如何处理用户的语言环境章节关于通过路由设置语言环境。
语言环境和URL
因为你可以在会话存储用户的语言环境,它可能会使用相同的URL来显示资源在不同的语言中基于用户的语言环境。例如,http://www.example.com/contact
可以显示了一个用户的内容用英语和法语为另一个用户。不幸的是,这违反了基本的网络规则:一个特定的URL返回相同的资源无论用户。进一步的问题,哪个版本的内容会被搜索引擎索引?
一个更好的政策是包括语言环境在URL中。这是通过使用特殊的路由系统完全支持_locale
参数:
- 注释
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src / AppBundle /控制器/ ContactController.php名称空间AppBundle\控制器;/ /……类ContactController扩展AbstractController{/ * * *@Route(* " / {_locale} /接触”,*的名字=“接触”,*需求= {*“_locale”:“en | fr |德”,*}*)* /公共函数联系(){}}
当使用特殊_locale
线路参数,匹配的区域设置自动设置的要求并且可以通过检索getLocale ()方法。换句话说,如果用户访问的URI/ fr /联系
的语言环境fr
将自动设置为当前请求的区域设置。
您现在可以使用语言环境创建路线在应用程序中其他翻译页面。
提示
读如何使用服务容器参数在你的路线吗学习如何避免硬编码_locale
要求所有的路线。
设置一个默认的语言环境
如果用户的语言环境还没有确定吗?可以保证地区设置每个用户的请求通过定义一个default_locale
框架:
- YAML
- XML
- PHP
1 2 3
# app / config / config.yml框架:default_locale:在