如何处理用户的语言环境

编辑该页面

警告:你浏览的文档欧宝官网下载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:
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。