spring i18n 词条英文下格式化占位符不生效 问题排查处理
问题
我们使用spring的messages做国际化,发现部分词条的占位符不生效,而且很奇怪的时,中文词条是正常的,英文词条有问题。
词条如下:
中文
XXX_invalid=XXX doesn't exist, number is {0}, please check!
英文
XXX_invalid = XXX不存在,编号为{0}, 请检查!
英文提示结果:
"errMsg": "XXX doesnt exist, number is {0}, please check!"
原因
这个问题确实很诡异,看起来词条没有任何问题,调用也没有问题,但是英文的提醒占位符未生效。
经过仔细观察,发现返回值里面的 doesnt
和词条的原文不一致,缺少了 '
,由此怀疑到'
有问题。
i18n词条处理文本时, 将单引号 ’ 视为 引用文本(Quoted Text) 的标记,当出现单引号时,会将其后的内容视为普通文本(跳过占位符解析)。
解决
解决就比较简单了,可以二选一
- 方案一 把
doesn't
改成does not
, 不使用'
- 方案二 使用
'
转义, 改成doesn''t
问题比较少见,特此记录。