列出给定语言的所有翻译 yml 键

List all translation yml keys for a given language

所以我的应用程序中有一个翻译文件如下:

en:
  activemodel:
    attributes:
      post:
        title: Title
        message: Message
        tag: Tag
      user:
        name: Name
        email: Email

我想获得所有可用键字符串的列表,因此对于此示例,我将获得以下内容:

'activemodel.attributes.post.title'
'activemodel.attributes.post.message'
'activemodel.attributes.post.tag'
'activemodel.attributes.user.name'
'activemodel.attributes.user.email'

我知道我可以使用 I18n.backend.send(:translations)[:en] 获取所有翻译的哈希值,但我不确定如何获取每条路径。

如有帮助将不胜感激!

您可以使用递归方法处理由 I18n.backend.send(:translations)[:en] 编辑的翻译散列 return:

def key_paths(key, hash_or_string)
  if hash_or_string.is_a?(Hash)
    hash_or_string.keys.map do |subkey|
      key_paths([key, subkey].compact.join("."), hash_or_string[subkey])
    end
  else
    key
  end
end

这递归地处理散列,为遇到的子散列嵌套键,以构建您要查找的路径。当子值不是散列(即它是字符串转换)时,它将 return 构建键,直到它到达嵌套的末尾。

然后您可以将其包装起来,使用另一种辅助方法找到给定语言的路径:

def lang_paths(lang)
  key_paths(nil, I18n.backend.send(:translations)[lang] || {}).flatten.sort
end

如果你那么运行:

lang_paths(:en)

您将返回可用翻译路径的排序数组。如果你 运行 它用于没有翻译的语言,你将得到一个空数组 - 如果你想以不同的方式处理,你可以在 lang_paths 中为没有翻译的语言环境引发错误。

希望对您有所帮助!