Spring Boot 2.5集成Thymeleaf 3如何分作用域管理message properties?
解决方案
核心思路:Spring Boot集成Thymeleaf时确实默认替换了原生消息解析器,只需要将原生StandardMessageResolver添加到消息解析器列表的首位,即可在保留Spring全局消息能力的同时,启用模板级分作用域消息解析。
1. 新增自定义Thymeleaf配置类
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.thymeleaf.messageresolver.IMessageResolver; import org.thymeleaf.messageresolver.StandardMessageResolver; import org.thymeleaf.spring5.SpringTemplateEngine; import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver; import java.util.ArrayList; import java.util.List; @Configuration public class ThymeleafMessageConfig { @Bean public SpringTemplateEngine templateEngine(SpringResourceTemplateResolver templateResolver, IMessageResolver springMessageResolver) { SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(templateResolver); List<IMessageResolver> resolvers = new ArrayList<>(); // 优先走Thymeleaf原生分作用域消息解析 resolvers.add(new StandardMessageResolver()); // 兜底走Spring全局消息源(对应原messages.properties) resolvers.add(springMessageResolver); templateEngine.setMessageResolvers(resolvers); return templateEngine; } }
2. 按规则组织模板级消息文件
消息文件和对应模板放在同级目录,文件名和模板名前缀保持一致即可,示例目录结构:
resources/ └── templates/ └── flow/ ├── list.html # 业务模板 ├── list.properties # 模板默认语言消息 ├── list_zh_CN.properties # 模板中文消息 └── list_en.properties # 模板英文消息
3. 原有业务代码无需修改
你之前写的消息读取表达式可以直接复用:
<td class="flow-name" th:text="#{|flow:${flow.key}|}" />
消息查找优先级为:当前模板同级消息文件 > 全局messages.properties,既实现了分模块管理文案,也可以保留全局公共消息的复用能力。
内容的提问来源于stack exchange,提问作者chrylis -cautiouslyoptimistic-
相关产品推荐
相关产品推荐

