列出给定语言的所有翻译 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
中为没有翻译的语言环境引发错误。
希望对您有所帮助!
所以我的应用程序中有一个翻译文件如下:
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
中为没有翻译的语言环境引发错误。
希望对您有所帮助!