我在Rails 4应用程序中使用i18n后备,以减少“de”和“de-AT”语言环境的重复翻译(可能会有更多像这样的对将来添加)。为了实现这一目标,我在application.rb
:
config.i18n.fallbacks = true
config.i18n.fallbacks = {'de-AT' => 'de'}
但我不希望其他语言环境回归到英语(这是默认的语言环境),无论是在制作还是在开发中。
这是可能的,如果是的话,我该如何实现?
答案 0 :(得分:0)
您是否尝试更改默认区域设置?
你在哪里
I18n.locale = :somelocale
尝试添加
I18n.default_locale = :somelocale
答案 1 :(得分:0)
这在 Rails 到 6.1 中很棘手,因为您需要 beat the logic in the Railtie initializer,而后者非常想回退到 default_locale
。
要将默认后备语言环境设置为 nil
,您需要使用以下代码:
config.i18n.default_locale = :en
config.i18n.fallbacks.defaults = [[]] # If you just write [], then default_locale is used
config.i18n.fallbacks.map = {
ca: :es, # Catalan fallback to Spanish
de: "en-UK", # German fallback to UK English first, then automatically to :en
}
注意 #1:默认情况下,所有国家/地区变体 (en-US
) 将首先回退到语言(例如 en
),如果您想以不同的方式回退,您只需指定某些内容。
注意 #2:检查您是否正确设置:
...> rails console
2.7.2 :001 > I18n.fallbacks["de-AT"] # Check what happens with Austrian German?
=> [:"de-AT", :de, :"en-UK", :en]
2.7.2 :002 > I18n.fallbacks[:ca] # Catalan falls back to Spanish
=> [:es]
2.7.2 :003 > I18n.fallbacks[:fr] # French should have no fallback!
=> [:fr]
注意 #3:映射将被递归扩展。
config.i18n.fallbacks.map = {
es: :fr, # Spanish to French
fr: :en, # French to English
}
rails console
2.7.2 :001 > I18n.fallbacks[:es]
=> [:es, :fr, :en]
但是您不需要注意循环和/或重复项。这些都被过滤掉了。
注意#4:映射散列也可以将语言代码映射到数组,从左到右依次处理。
config.i18n.fallbacks.map = {
ca: [:es, :fr, :en], # Catalan falls back to Spanish then French, then English
}
注意 #5:我还没有找到一个好的规范语言映射模型,它根据每个国家/地区的语言当前语言技能做出“适当”的回退决策,并将其编码到 Rails 中。
注意 #6:我强烈建议:
注意 #7:从 Rails 6.1.3 开始,默认情况下不再包含默认语言环境作为后备 (see this commit)