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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails i18n如何获取某个键的所有值?相关的知识,希望对你有一定的参考价值。

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

translations = I18n.backend.send(:translations)

得到所有的钥匙

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

en:
  home:
    test: test
答案

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"}
另一答案

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

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

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

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

另一答案

设置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

以上是关于Rails i18n如何获取某个键的所有值?的主要内容,如果未能解决你的问题,请参考以下文章

Java中的Hashtable如何根据值获取键?

如何生成属性名称,并在 Rails 模型中获取它们的值

如何在 Rails 3 中使用 I18n 后备功能

从 Rails 模型内部访问翻译文件 (i18n)

java中如何获取我在ACCESS数据库中查询到的某个字段所对应的主键的值?

多维数组:如何获取特定键的所有值? [复制]