I18n.with_locale 线程安全吗?

elh*_*tis 5 ruby-on-rails thread-safety rails-i18n

我创建了一个功能,可以使用页面创建者的语言发布新闻。

这是创建新闻的代码:

def add_news
  locale = creator.language.blank? ? I18n.locale : creator.language
  I18n.with_locale(locale) do
    title = I18n.t('news.subject')
  end
  create_news({title: title})
end
Run Code Online (Sandbox Code Playgroud)

它运作良好,新闻是用好的语言创造的。但有时,使用了错误的语言。我已经阅读了 i18n ( https://github.com/svenfuchs/i18n/blob/master/lib/i18n.rb )的源代码,对我来说with_local函数不是线程安全的。我很惊讶,因为我没有读过关于这个问题的帖子。

那么,你觉得呢?线程安全与否?如果是这样,您知道其他解决方案吗?

谢谢和 br,

埃里克

use*_*419 3

看起来它来自Ruby on Rails 指南,因为它使用 Thread.current。

还进行了一个小型(结论性)实验:

n = I18n.available_locales.length
10.times do |i|
  loc = I18n.available_locales[i % n]
  Thread.new do
    I18n.with_locale(loc) do
      puts "#{loc} #{I18n.t 'one.of.your.keys'}"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)