Rails i18n如何获取某个键的所有值?

Rub*_*tic 10 key key-value ruby-on-rails-3 rails-i18n

在Rails i18n中,如何使用以下内容获取某个键的所有值:

translations = I18n.backend.send(:translations)
Run Code Online (Sandbox Code Playgroud)

得到所有的钥匙

我需要能够获得某个部分,例如只返回"home"下的所有内容

en:
  home:
    test: test
Run Code Online (Sandbox Code Playgroud)

Chr*_*erg 14

返回值I18n.backend.send(:translations)只是一个哈希值,因此您只需传入适当的键即可访问子集.

例如,如果你有:

en:
  foo:
    bar:
      some_term: "a translation"
      some_other_term: "another translation"   
Run Code Online (Sandbox Code Playgroud)

然后你可以得到哈希的子集bar:

I18n.backend.send(:translations)[:en][:foo][:bar]
#=> { :some_term=>"a translation", :some_other_term => "another translation"}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢我在此期间发现I18n.t('home')也有效 (2认同)

My *_*God 5

默认的I18n后端是I18n::Backend::Simple,它不会向您公开翻译.(I18.backend.translations是受保护的方法.)

这通常不是一个好主意,但如果您确实需要此信息并且无法解析该文件,则可以扩展后端类.

class I18n::Backend::Simple
  def translations_store
    translations
  end
end
Run Code Online (Sandbox Code Playgroud)

然后,您可以调用I18n.backend.translations_store以获取已解析的翻译.您可能不应该依赖此作为长期策略,但它可以为您提供您现在需要的信息.