如何使用用户的语言环境

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.8,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

如何使用用户的语言环境

当前用户的语言环境存储在请求中,可以通过请求对象:

1 2 3 4 5 6
使用ob娱乐下载组件HttpFoundation请求公共函数indexAction(请求美元请求美元语言环境美元请求->getLocale ();}

要设置用户的语言环境,你可能想要创建一个自定义事件监听器,以便在系统的其他部分(即翻译器)需要它之前设置它:

1 2 3 4 5 6 7
公共函数onKernelRequest(GetResponseEvent美元事件美元请求美元事件->getRequest ();//确定$locale的一些逻辑美元请求->setLocale (美元语言环境);}

在用户会话期间使区域设置“粘滞”有关如何使用户的区域设置“粘滞”到会话的更多信息。

请注意

使用请求- > setLocale ()在控制器中太晚影响翻译器。通过监听器(如上所述),URL(见下)或调用设置区域设置setLocale ()直接在翻译服务。

看到如何使用用户的语言环境小节介绍通过路由设置区域设置。

区域和URL

由于可以在会话中存储用户的语言环境,因此可能很容易使用相同的URL根据用户的语言环境以不同的语言显示资源。例如,http://www.example.com/contact可以为一个用户显示英语内容,为另一个用户显示法语内容。不幸的是,这违反了Web的基本规则:不管用户是谁,特定URL都会返回相同的资源。更复杂的问题是,哪个版本的内容会被搜索引擎索引?

更好的策略是在URL中包含区域设置。使用特殊的路由系统完全支持这一点_locale参数:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6
# app / config / routing.yml联系人:路径:/ {_locale} /接触默认值:_controller:AppBundle:联系人:索引要求:_locale:在| fr |德

使用特殊时_locale参数,则匹配的区域设置为在请求上自动设置并且可以通过getLocale ()方法。换句话说,如果用户访问URI/ fr /联系,区域fr将自动设置为当前请求的区域设置。

现在可以使用语言环境创建到应用程序中其他已翻译页面的路由。

提示

如何在路由中使用服务容器参数来学习如何避免硬编码_locale在你所有的路线上都有要求。

设置默认区域设置

如果还没有确定用户的语言环境怎么办?类型可以保证为每个用户的请求设置语言环境default_locale对于框架:

  • YAML
  • XML
  • PHP
1 2 3
# app / config / config.yml框架:default_locale:
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。