如何处理用户的语言环境
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.2,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
如何处理用户的语言环境
当前用户的语言环境是存储在请求,并通过访问请求
对象:
1 2 3 4 5 6
使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;公共函数指数(请求美元请求){美元语言环境=美元请求- >getLocale ();}
设置用户的语言环境,您可能想要创建一个自定义事件侦听器,以便它之前设置系统的其他部分(即译者)需要:
1 2 3 4 5 6 7
公共函数onKernelRequestRequestEvent (美元事件){美元请求=美元事件- >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 /控制器/ ContactController.php名称空间应用程序\控制器;/ /……类ContactController扩展AbstractController{/ * * *@Route(* " / {_locale} /接触”,*的名字=“接触”,*需求= {*“_locale”:“en | fr |德”,*}*)* /公共函数联系(){}}
1 2 3 4 5 6
#配置/ routes.yaml联系人:路径:/ {_locale} /接触控制器:控制器应用\ \ ContactController:索引要求:_locale:在| fr |德
1 2 3 4 5 6 7 8 9 10 11 12
< !——配置/路线。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} /接触”>控制器= " App \控制器\ ContactController:指数”><要求关键=“_locale”>在| fr |德< /要求>< /路线>< /路线>
1 2 3 4 5 6 7 8 9 10 11 12
/ /配置/ routes.php使用应用程序\控制器\ContactController;使用欧宝娱乐app下载地址\组件\路由\加载程序\配置器\RoutingConfigurator;返回函数(RoutingConfigurator美元路线){美元路线- >add (“接触”,“/ {_locale} /接触”)- >控制器([ContactController::类,“指数”])- >需求([“_locale”= >“en | fr |德”]);};
当使用特殊_locale
线路参数,匹配的区域设置自动设置的要求并且可以通过检索getLocale ()方法。换句话说,如果用户访问的URI/ fr /联系
的语言环境fr
将自动设置为当前请求的区域设置。
您现在可以使用语言环境创建路线在应用程序中其他翻译页面。
提示
作为一个定义语言环境要求容器参数为了避免硬编码它的值在所有你的路线。
设置一个默认的语言环境
如果用户的语言环境还没有确定吗?可以保证地区设置每个用户的请求通过定义一个default_locale
框架:
- YAML
- XML
- PHP
1 2 3
#配置/包/ translation.yaml框架:default_locale:在
1 2 3 4 5 6 7 8 9 10 11 12
< !——配置/包/翻译。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
/ /配置/包/ translation.php美元容器- >loadFromExtension (“框架”,(“default_locale”= >“en”]);