标签:创建 creat href 重写 any mat mes this 模板
写在前面:接下来很长一段时间的文章主要会记录一些项目中实际遇到的问题及对应的解决方案,在相应代码分析时会直指问题所在,不会将无关的流程代码贴出,感兴趣的读者可以自行跟踪。同时希望大家能够将心得体会在评论区分享出来,让大家共同进步!
环境或版本:Spring 3.2.3
现象:利用Spring自带的MessageSource来处理国际化文案,us状态下的文案有部分占位符未被替换,cn状态下的正常。文案如下:
tms.pallet.order.box.qty=The total palletized boxes quantity {0} doesn‘t match with the received boxes quantity 小贝,Please double check!
tms.pallet.order.box.qty=打板总箱数件{0},与订单收货总箱数小贝不一致。请检查!
直觉:是不是英文文案太长了,Spring处理时对长度做了限制,仔细想了想Spring应该不会设计的这么坑。
排查:断点跟踪Spring源码(入口:MessageSource的getMessage方法),最后发现了MessageFormat中这样的一段处理方法:
上面的这段代码写的有点让人费解,略微奇特,我们主要看第一个逻辑分支:对每一个待处理的国际化文案模板串中的字符进行遍历,当字符为"‘"时,判断后一个字符是否也为“‘”,如果是则将“‘”拼接到已处理的StringBuilder中,不是则将inQuote至为True,如果该字符不会‘{‘且inQuote为false则将part重新置为0,并且segments[SEG_INDEX]=null的话重新创建StringBuilder对象,否则继续拼接。
原因分析:
解决方案:
从源码看只有一种解决方式,{}之间的单引号需要成对出现,我们的处理方式是将文案修改为了:
tms.pallet.order.box.qty=The total palletized boxes quantity {0} doesn‘‘t match with the received boxes quantity 小贝,Please double check!
直接修改文案其实并不是一种很好的解决方法,最好是能够重写Spring调用applyPattern方法前的某一方法来将单引号替换为双引号。无奈spring 3.2.3版本中对应国际化的处理方法一路private,不给你重写的机会。
查阅相关资料得知,在Spring4.3.2版本中可以通过重写ResourceBundleMessageSource类中的getStringOrNull方法来实现。
长远方案:升级项目中的Spring版本,同时使用更多的新版特性。
http://www.ljhseo.com/
http://www.xyrjkf.net/
http://www.xyrjkf.cn/
http://www.xyrjkf.com.cn/
http://www.zjdygsi.cn/
http://www.zjdaiyun.cn/
http://www.jsdygsi.cn/
http://www.xyrjkf.top/
http://www.xyrjkf.com/
http://www.daiyunzj.cn/
http://ljhseo.com/
http://xyrjkf.net/
http://xyrjkf.cn/
http://xyrjkf.com.cn/
http://zjdygsi.cn/
http://zjdaiyun.cn/
http://jsdygsi.cn/
http://xyrjkf.top/
http://xyrjkf.com/
http://daiyunzj.cn/
标签:创建 creat href 重写 any mat mes this 模板
原文地址:https://www.cnblogs.com/ljhseocom/p/8999524.html