10

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

translations = I18n.backend.send(:translations)

拿到所有钥匙

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

en:
  home:
    test: test
4

3 回答 3

14

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

例如,如果您有:

en:
  foo:
    bar:
      some_term: "a translation"
      some_other_term: "another translation"   

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

I18n.backend.send(:translations)[:en][:foo][:bar]
#=> { :some_term=>"a translation", :some_other_term => "another translation"}
于 2013-02-01T13:29:31.960 回答
5

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

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

class I18n::Backend::Simple
  def translations_store
    translations
  end
end

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

于 2013-02-01T13:16:43.767 回答
0

设置I18n.locale然后做I18n.t的工作正常,例如:

def self.all_t(string)
  I18n.locale = :en
  en = I18n.t("pages.home.#{string}")
  I18n.locale = :fr
  fr = I18n.("pages.home.#{string}")
  [en, fr]
end
于 2018-02-28T12:28:37.330 回答