我刚刚意识到,推荐Rails的方式来设置的地点在控制器为什么Rails中的语言环境设置充当全局(使用Thin时)?
before_filter :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
将全球的语言环境。上面的代码工作,但我不知道是否default_locale
真的默认,如果你必须明确键入它?
我期望的是让每个请求的区域(就像我们每个请求会话),并做类似:
def set_locale
locale = params[:locale] if params[:locale]
end
,并具有以其它方式使用默认I18n.default_locale
。这将在路径非常匹配的可选区域:
# config/routes.rb
scope "(:locale)", :locale => /en|nl/ do
resources :books
end
现在如果由于某种原因,我在一些行动跳过区域设置是使用区域设置在之前的请求可能是从其他用户设定!
而不是潜在的竞争条件,因为一个请求可以改变全局I18n.locale
而另一个请求(已设置另一个区域设置beforehande)正处于渲染的中间?
UPDATE:一些细节,我发现,现在,从的I18n documentstion:
设置伪全球当前的语言环境,即在Thread.current哈希 高清区域设置=(区域)
现在我想明白,如果每个请求是一个单独的线程。
更新2:看我的解释回答。
我有完全相同的问题,但我使用独角兽!任何想法如何解决这个问题?谢谢 – 2014-07-24 06:12:41
我想当你说“I18n.set_locale”时,你的意思是“I18n.locale =”对吗? http://www.rubydoc.info/github/svenfuchs/i18n/I18n/Config:locale= – lulalala 2014-11-11 02:16:11
你是对的,谢谢你的纠正。 – khustochka 2014-11-11 14:27:48