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

如何为命名空间资源BudgetLine::Accommodation的嵌套表单定义I18n翻译

解决Rails命名空间模型嵌套关联字段的I18n翻译问题

要让BudgetLine::Accommodation.human_attribute_name("budget_line_items.unit")返回正确的翻译结果,你需要调整YAML配置的层级结构,把嵌套关联字段的翻译挂载到父模型budget_line/accommodation的属性节点下,而非将budget_line_items当作独立的命名空间模型配置。

正确的I18n配置

en:
  activerecord:
    attributes:
      budget_line/accommodation:
        budget_line_items:
          unit: "Room"
          price: "Price (USD)"

原理说明

调用Model.human_attribute_name("association.field")时,Rails的翻译查找逻辑是:

  1. 优先查找activerecord.attributes.[模型名].[关联名].[字段名]路径
  2. 若未找到匹配项,会回退到全局的关联模型字段翻译,即activerecord.attributes.[关联模型名].[字段名]

你之前的配置错误在于把budget_line_items当作budget_line/accommodation的子模型处理,但实际上它是父模型的关联属性,因此需要嵌套在budget_line/accommodation的属性节点下。

验证方法

在Rails控制台执行以下命令,确认翻译生效:

BudgetLine::Accommodation.human_attribute_name("budget_line_items.unit")
# 应返回 "Room"

如果需要给BudgetLineItem的字段设置全局通用翻译(所有父模型共用),可以直接配置:

en:
  activerecord:
    attributes:
      budget_line_item:
        unit: "Unit"
        price: "Price"

内容的提问来源于stack exchange,提问作者Magnus Remøe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 22:47:42