所以我的应用程序中有一个翻译文件如下:
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]
获取所有翻译的哈希值,但我不确定如何获取每条路径。
任何帮助都会非常感谢!
答案 0 :(得分:2)
您可以使用递归方法处理package main
import (
"fmt"
)
func main() {
a := [3]string{"a","b","c"}
fmt.Println(a[0][0])
}
返回的翻译哈希:
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
然后运行:
def lang_paths(lang)
key_paths(nil, I18n.backend.send(:translations)[lang] || {}).flatten.sort
end
您将获得一系列可用的翻译路径。如果你为没有翻译的语言运行它,你将获得一个空数组 - 如果你想以不同的方式处理它,你可以在lang_paths(:en)
中为没有翻译的语言环境引发错误。
希望有所帮助!