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,
埃里克
看起来它来自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)