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
相关产品推荐
相关产品推荐

