rails中返回的I18n.locale.to_s是什么语言环境

时间:2017-06-20 17:49:30

标签: ruby-on-rails rubygems

我无法获得区域设置字符串I18n.locale.to_s返回的内容。它是代码运行的语言环境(即部署代码的服务器的语言环境),还是从请求中获取语言环境(请求URL的语言环境)?

我认为它应该是服务器的语言环境,就像来自我们的用户(en_US)命中运行JP(ja_JP)的服务器一样,I18n.locale.to_s应该将语言环境作为JP返回。如果我的假设是错误的,请纠正我。

1 个答案:

答案 0 :(得分:2)

是的,你是对的。除非您使用其他代码(例如额外的宝石),否则Rails不会对访问者的IP地址进行查找,也不会考虑与访问者的浏览器有关的任何内容。

当您在控制器或代码中的其他位置调用I18n.locale.to_s时,您将获得服务器位置的默认区域设置。但是,如果您想更改当前访问者的区域设置,例如,他们点击链接以通过发送:locale参数来更改请求,您可以执行以下操作:

before_action :set_locale

def set_locale
  I18n.locale = params[:locale] || I18n.default_locale
end

然后,该请求中对I18n.locale.to_s的所有调用现在都将以覆盖的语言环境进行响应。