Thymeleaf中如何将国际化(i18n)消息表达式与其他文本拼接
解决Thymeleaf国际化文本后添加冒号的问题
这个问题我之前在项目里也碰到过,Thymeleaf的表达式解析规则会把你写的#{person.name.label}:整个当成一个待解析的表达式,自然会抛出解析异常。给你几个简单可行的解决方案,按需选择:
方案1:直接在国际化配置文件中添加冒号
这是最推荐的方式,因为不同语言的标点习惯可能不同(比如有些语言冒号的位置和中文/英文不一样),把标点放在.properties文件里更符合国际化的设计思路:
- 修改你的国际化配置,比如
person.name.label=Name:(英文)、person.name.label=姓名:(中文) - 然后直接使用原有的写法即可:
<label th:text="#{person.name.label}"></label>
方案2:使用Thymeleaf的表达式拼接
如果不想修改配置文件,可以用表达式拼接的方式,把冒号用单引号包裹,作为字符串和国际化值拼接:
<label th:text="#{person.name.label} + ':'"></label>
Thymeleaf会先解析#{person.name.label}得到对应语言的文本,再和冒号拼接输出。
方案3:使用内联文本表达式
Thymeleaf的内联语法[[...]]可以直接输出解析后的文本,后面直接加冒号就不会触发表达式解析错误:
<label>[[#{person.name.label}]]:</label>
这种写法看起来更直观,适合简单的文本拼接场景。
内容的提问来源于stack exchange,提问作者Manuel Jordan
相关产品推荐
相关产品推荐

