You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:13:14