如何获取Ruby on Rails中指定语言的所有翻译YAML键路径?
生成I18n翻译的完整键路径列表
我的应用中有如下翻译文件:
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]获取翻译哈希,但不确定如何生成完整的键路径,恳请提供帮助!
没问题!要生成这些完整的键路径,只需要写一个递归方法遍历嵌套的翻译哈希,把每一层的键逐步拼接起来就行。下面是具体的实现方案:
递归方法实现
你可以用这个Ruby方法来提取所有完整键路径:
def extract_full_keys(hash, parent_key = "") full_keys = [] hash.each do |key, value| # 拼接当前层级的键路径 current_key = parent_key.empty? ? key.to_s : "#{parent_key}.#{key}" # 如果值还是哈希,就继续递归遍历 if value.is_a?(Hash) full_keys += extract_full_keys(value, current_key) else # 不是哈希就把完整路径加入结果数组 full_keys << current_key end end full_keys end
使用方法
调用这个方法非常简单,先拿到你的英文翻译哈希,再传入方法即可:
# 获取en下的所有翻译哈希 en_translations = I18n.backend.send(:translations)[:en] # 提取所有完整键路径 full_key_list = extract_full_keys(en_translations)
执行后full_key_list就是你想要的数组,包含所有像activemodel.attributes.post.title这样的完整键字符串。
进阶:只提取特定前缀的键
如果你只想获取activemodel.attributes下面的键路径,可以先定位到对应的哈希层级,再传入方法时带上前缀:
# 定位到activemodel.attributes层级 attributes_hash = I18n.backend.send(:translations)[:en][:activemodel][:attributes] # 提取时指定前缀,确保生成的键路径完整 full_key_list = extract_full_keys(attributes_hash, "activemodel.attributes")
这样就能精准得到你需要的那组键路径啦。
内容的提问来源于stack exchange,提问作者user2320239
相关产品推荐
相关产品推荐

