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

如何在Jbuilder JSON响应中结合Mobility gem输出对应语言的name属性?

解决Mobility Gem在JSON响应中输出对应语言name属性的方案

核心思路

Mobility默认通过name方法根据全局I18n locale返回翻译,但你的场景需要匹配关联Consumer的idiom语言,而非全局locale,因此需要手动指定目标语言获取对应翻译值。

具体实现方案

1. 直接在JSON响应中指定语言

利用Mobility提供的translate方法,传入Consumer关联的idiom语言代码:

# 假设transaction关联consumer,consumer的idiom字段包含code语言代码属性
json.label transaction.categoryminor.translate(:name, locale: transaction.consumer.idiom.code)

2. 模型层封装辅助方法(优化代码复用)

在Categoryminor模型中添加专用方法,统一处理语言匹配逻辑:

# app/models/categoryminor.rb
def name_for_language(lang_code)
  translate(:name, locale: Mobility.normalize_locale(lang_code))
end

之后在JSON响应中直接调用:

json.label transaction.categoryminor.name_for_language(transaction.consumer.idiom.code)

3. 修正强参数写法

你之前的强参数代码存在语法错误,正确的动态生成翻译字段写法如下:

translated_params = I18n.available_locales.map do |l|
  "name_#{Mobility.normalize_locale(l)}".to_sym
end
# 后续可用于permit,例如:
# params.require(:categoryminor).permit(*translated_params)

关键注意点

  • 确保idiom.code的值是Mobility兼容的标准语言代码(如en、zh-CN),若格式不匹配,可通过Mobility.normalize_locale方法统一转换。
  • 使用translate方法是Mobility官方推荐的手动指定locale方式,比直接调用name_en这类后缀字段更具兼容性。

内容的提问来源于stack exchange,提问作者Jerome

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 10:24:53