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

I18n插值时如何通过嵌套JSON对象替换%{name}占位符?

解决i18n嵌套属性插值问题

方案一:修改模板占位符为嵌套路径

直接修改en.yml中的消息模板,把原占位符%{name}替换为对应嵌套属性的路径:

update_message: "The user updated device's name to <b>%{user.name}</b>"

之后确保传入的JSON对象能被i18n解析嵌套属性:

  • 若在Ruby环境,将JSON解析为OpenStruct(支持点语法访问嵌套属性):
    require 'ostruct'
    json_data = '{"user": {"id": 1, "name": "Wagner Junior"}}'
    json_object = JSON.parse(json_data, object_class: OpenStruct)
    t('update_message', json_object)
    

方案二:使用Hash兼容的占位符语法

如果你的i18n库支持Hash的方括号访问语法,可将模板改为:

update_message: "The user updated device's name to <b>%{user[name]}</b>"

直接传入解析后的普通Hash即可生效:

json_object = JSON.parse('{"user": {"id": 1, "name": "Wagner Junior"}}')
t('update_message', json_object)

方案三:合并额外插值键(不破坏原对象结构)

如果上述模板修改方式受限,可在调用t方法时,临时合并一个name键,同时保留原JSON对象的完整结构(不影响其他消息使用):

t('update_message', json_object.merge(name: json_object.dig('user', 'name')))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:09:58