Ruby on rails 是否有可能使rails i18n区域设置相互回退?
我正在使用Rails 3和Globalize3 0.2.0.beta4 理想情况下,我需要:fr回退到:en,反之亦然 有些情况下,只有法语翻译可用,即使语言环境为:en,我也需要显示它 我试过了Ruby on rails 是否有可能使rails i18n区域设置相互回退?,ruby-on-rails,ruby-on-rails-3,internationalization,globalization,globalize2,Ruby On Rails,Ruby On Rails 3,Internationalization,Globalization,Globalize2,我正在使用Rails 3和Globalize3 0.2.0.beta4 理想情况下,我需要:fr回退到:en,反之亦然 有些情况下,只有法语翻译可用,即使语言环境为:en,我也需要显示它 我试过了 config.i18n.fallbacks = { :fr => :en, :en => :fr } 但毫不奇怪,它会导致堆栈级别的错误太深。如果您传递一个区域设置数组,它们将被设置为所有区域设置的默认回退 config.i18n.fallbacks = [:en, :fr] 不幸的是
config.i18n.fallbacks = { :fr => :en, :en => :fr }
但毫不奇怪,它会导致堆栈级别的错误太深。如果您传递一个区域设置数组,它们将被设置为所有区域设置的默认回退
config.i18n.fallbacks = [:en, :fr]
不幸的是,我还没有找到一种方法,只设置两个区域设置,以便相互依赖。最后我用monkey修补了Globalize3。不太好,因为每当站点需要新的区域设置时,我都要更新补丁,但是,嘿,它成功了
module Globalize
class << self
def fallbacks(locale = self.locale)
case locale
when :en then [:en, :fr]
when :fr then [:fr, :en]
end
end
end
end
模块全球化
同学们我正在改变我的答案
要启用回退,请将以下内容添加到environment.rb文件中:
#support for locale fallbacks
require "i18n/backend/fallbacks"
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
然后,您可以像以前一样启用循环回退,例如:
config.i18n.fallbacks = {'en' => 'fr', 'fr' => 'en'}
在这种情况下,如果en语言环境中缺少某些内容,它将检查fr语言环境,然后反过来检查。运行此命令时,我没有收到任何错误
来源:这似乎已经改变为:
Globalize.fallbacks = {:en => [:en, :fr], :fr => [:fr, :en]}
从官方文件中获得:
在最新的i18n gem(0.7.0)中,我发现有必要这样定义后备区域设置(在config/application.rb
中):
您还需要在所有config/environments/*.rb
文件中设置config.i18n.fallbacks=true
# Custom I18n fallbacks
config.after_initialize do
I18n.fallbacks = I18n::Locale::Fallbacks.new(at: :"de-DE", ch: :"de-DE", gb: :"en-US")
end