Rails I18n哈希的后备

时间:2016-08-22 09:51:42

标签: ruby-on-rails rails-i18n

我有一个例子ymls:

en:
  hello:
    world: World
    time:
      am: "AM"
      pm: "PM"

ja:
  hello:
    world:
    time:
      am: "午前"
      pm: "午後"

当我尝试调用缺少的区域设置时,后备运行良好:

I18n.locale = :ja
I18n.t('hello.world') => 'World'

但是当我调用父键(hello)时,它会在某些值上返回'nil':

I18n.locale = :ja
I18n.t('hello') => { world: nil, time: { am: "午前", pm: "午後" } }

如何通过后备获得翻译:{{1​​}}

谢谢!

2 个答案:

答案 0 :(得分:0)

您是否尝试使用RadioButtons选项调用translate方法?

答案 1 :(得分:0)

当语言环境中不存在键时,回退有效。这里的问题是hello存在。

我遇到了相同的要求。我最终要做的是在加载时而不是在运行时应用后备,如下所示:

I18n::Backend::Simple.prepend(Module.new do
  def init_translations
    super

    # Can't do anything if fallbacks haven't loaded yet.
    return unless I18n.respond_to?(:fallbacks)

    merged = {}
    available_locales.each do |base|
      ::I18n.fallbacks[base].reverse.each do |fallback|
        merged[base] ||= {}
        merged[base].deep_merge!(@translations[fallback] || {})
      end
    end

    @translations = merged
  end
end)