gpt4 book ai didi

ruby-on-rails - 列出给定语言的所有翻译 yml 键

转载 作者:行者123 更新时间:2023-12-02 20:32:31 25 4
gpt4 key购买 nike

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

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] 返回的翻译哈希:

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)

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

希望有帮助!

关于ruby-on-rails - 列出给定语言的所有翻译 yml 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48263338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com