use*_*239 2 hash ruby-on-rails rails-i18n
所以我的应用程序中有一个翻译文件,如下所示:
en:
activemodel:
attributes:
post:
title: Title
message: Message
tag: Tag
user:
name: Name
email: Email
Run Code Online (Sandbox Code Playgroud)
我想获得所有可用关键字符串的列表,因此对于本示例,我将获得以下内容:
'activemodel.attributes.post.title'
'activemodel.attributes.post.message'
'activemodel.attributes.post.tag'
'activemodel.attributes.user.name'
'activemodel.attributes.user.email'
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用 获得所有翻译的哈希值I18n.backend.send(:translations)[:en],但我不确定如何获得每条路径。
任何帮助都会非常感谢!
小智 5
您可以I18n.backend.send(:translations)[:en]使用递归方法处理返回的翻译哈希:
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
Run Code Online (Sandbox Code Playgroud)
这递归地处理散列,为遇到的子散列嵌套键,以建立您正在寻找的路径。当一个子值不是一个散列值(即它是一个字符串翻译)时,它会返回构建的键,直到它到达嵌套的末尾。
然后,您可以将其打包以使用另一种辅助方法查找给定语言的路径:
def lang_paths(lang)
key_paths(nil, I18n.backend.send(:translations)[lang] || {}).flatten.sort
end
Run Code Online (Sandbox Code Playgroud)
如果你然后运行:
lang_paths(:en)
Run Code Online (Sandbox Code Playgroud)
你会得到一个可用翻译路径的排序数组。如果您为没有翻译的语言运行它,您将得到一个空数组 -lang_paths如果您想以不同的方式处理没有翻译的语言环境,您可能会引发错误。
希望有帮助!
| 归档时间: |
|
| 查看次数: |
893 次 |
| 最近记录: |