我正在使用默认导轨I18n本地化应用程序,其中globalize3作为后端。
在自动转到默认回退之前,是否可以设置包含国家/地区代码(即:fr-CA
)的区域设置以回退到其特定语言(:fr
)?我知道可以使用
config.i18n.fallbacks = {'fr-CA' => 'fr'}
但是不必手动添加每个回退并自动执行此行为会很好。
答案 0 :(得分:2)
为了实现这一点,我有一个带
的初始化器I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
有关详细信息,请参阅the source code。
修改:
这让我想起,ActionView LookupContext中有an annoying bug阻止它为本地化视图工作(尽管它适用于语言环境文件)。我发现它还没有修好。基本上,如果您有任何本地化视图(例如,由于其长度而不适合存储在区域设置文件中的帮助页面),则fr-CA区域设置将不回退到名为help的视图。 fr.html.erb。您必须将文件命名为help.fr-CA.html.erb 或,这就是我所做的,使用另一个初始化程序monkeypatch LookupContext,如下所示:
module ActionView
class LookupContext
# Override locale= to also set the I18n.locale. If the current I18n.config object responds
# to original_config, it means that it's has a copy of the original I18n configuration and it's
# acting as proxy, which we need to skip.
def locale=(value)
if value
config = I18n.config.respond_to?(:original_config) ? I18n.config.original_config : I18n.config
config.locale = value[0,2] # only use first part of the locale in lookups
end
super(@skip_default_locale ? I18n.locale : default_locale)
end
end
end
另一个编辑:请注意,该修补程序非常粗糙,会破坏完整的区域设置查找,直接针对该语言。如果您还需要完全匹配的视图(language-REGION),您需要改进我的代码!