2

我正在使用默认的 rails I18n 本地化一个应用程序,并将 globalize3 作为后端。

是否可以在自动转到默认回退之前设置带有国家代码(即:fr-CA)的区域设置以回退到其特定语言( )?:fr我知道可以手动设置每个语言环境/国家/地区

config.i18n.fallbacks = {'fr-CA' => 'fr'}

但是最好不必手动添加每个后备并自动执行此行为。

4

1 回答 1

3

为了准确地实现这一点,我有一个初始化器

I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)

有关更多信息,请参阅源代码

编辑:

这提醒了我,ActionView LookupContext 中有一个烦人的错误,它阻止了本地化视图的工作(尽管它适用于语言环境文件)。我看还没有修好。基本上,如果您有任何本地化视图(例如帮助页面,由于它们的长度不适合存储在语言环境文件中),那么 fr-CA 语言环境将不会退回到名为 help.fr.html.erb 的视图。您要么必须将文件命名为 help.fr-CA.html.erb ,要么就像我所做的那样,用另一个初始化程序对 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

另一个编辑:请注意,该补丁相当粗糙并且破坏了完整的语言环境查找,直接针对语言。如果您还需要完全匹配的视图(语言区域),您需要改进我的代码!

于 2012-11-14T00:42:10.960 回答