如何处理用户的语言环境
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.7,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
如何处理用户的语言环境
当前用户的语言环境是存储在请求,并通过访问请求
对象:
1 2 3 4 5 6
使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;公共函数indexAction(请求美元请求){美元语言环境=美元请求- >getLocale ();}
设置用户的语言环境,您可能想要创建一个自定义事件侦听器,以便它之前设置系统的其他部分(即译者)需要:
1 2 3 4 5 6 7
公共函数onKernelRequest(GetResponseEvent美元事件){美元请求=美元事件- >getRequest ();/ /一些逻辑来确定美元的地区美元请求- >setLocale (美元语言环境);}
读使语言环境在用户会话期间“粘性”有关更多信息,让用户的会话地区“粘性”。
请注意
设置语言环境使用$请求- > setLocale ()
在控制器已经太晚了影响翻译。通过侦听器可以设置语言环境(如上图),(见下)或调用的URLsetLocale ()
直接在翻译
服务。
看到如何处理用户的语言环境章节关于通过路由设置语言环境。
语言环境和URL
因为你可以在会话存储用户的语言环境,它可能会使用相同的URL来显示资源在不同的语言中基于用户的语言环境。例如,http://www.example.com/contact
可以显示了一个用户的内容用英语和法语为另一个用户。不幸的是,这违反了基本的网络规则:一个特定的URL返回相同的资源无论用户。进一步的问题,哪个版本的内容会被搜索引擎索引?
一个更好的政策是包括语言环境在URL中。这是通过使用特殊的路由系统完全支持_locale
参数:
- YAML
- XML
- PHP
1 2 3 4 5 6
# app / config / routing.yml联系人:路径:/ {_locale} /接触默认值:{_controller:AppBundle:联系人:索引}要求:_locale:在| fr |德
1 2 3 4 5 6 7 8 9 10 11 12
< !——app / config /路由。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><路线xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/routing”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/routing //www.oldmanjams.com/schema/routing/routing-1.0.xsd”><路线id=“接触”路径=“/ {_locale} /接触”><默认的关键=“_controller”>AppBundle:联系人:索引< /默认的><要求关键=“_locale”>在| fr |德< /要求>< /路线>< /路线>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / app / config / routing.php使用欧宝娱乐app下载地址\组件\路由\RouteCollection;使用欧宝娱乐app下载地址\组件\路由\路线;美元路线=新RouteCollection ();美元路线- >add (“接触”,新路线(“/ {_locale} /接触”,数组(“_controller”= >“AppBundle:联系人:指数”),数组(“_locale”= >“en | fr |德”)));返回美元路线;
当使用特殊_locale
线路参数,匹配的区域设置自动设置的要求并且可以通过检索getLocale ()方法。换句话说,如果用户访问的URI/ fr /联系
的语言环境fr
将自动设置为当前请求的区域设置。
您现在可以使用语言环境创建路线在应用程序中其他翻译页面。
提示
读如何使用服务容器参数在你的路线吗学习如何避免硬编码_locale
要求所有的路线。
设置一个默认的语言环境
如果用户的语言环境还没有确定吗?可以保证地区设置每个用户的请求通过定义一个default_locale
框架:
- YAML
- XML
- PHP
1 2 3
# app / config / config.yml框架:default_locale:在
1 2 3 4 5 6 7 8 9 10 11 12
< !——app / config / config。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xmlns:框架=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/symfony //www.oldmanjams.com/schema/dic/symfony/symfony-1.0.xsd”><框架:配置缺省语言环境=“en”/ >< /容器>
1 2 3 4
/ / app / config / config . php美元容器- >loadFromExtension (“框架”,数组(“default_locale”= >“en”));