spring - 多模块项目中的 Spring Boot i18n
问题描述
我有这个多模块项目:
Parent Pom
|
|----Main module (@SpringBootApplcation and application.properties)
|
|----Module I
|
|----Module II
|
|----Module III
主模块依赖于其他模块并包含messages.properties
和messages_fr.properties
下resources/messages/
以及application.properties
我定义MessageResource
bean的位置spring.messages.basename=messages/messages
。现在我想把messages.properties
文件放在每个模块中。例如,对于模块 I,在src/main/resources/messages/messages.properties
模块 II 相同的情况下。我的问题是,如何在MessageResource
定义的 bean 中添加模块的消息application.properties
?我尝试了几个这样的声明:
spring.messages.basename=messages/messages,classpath:/com/company/moduleI/resources/messages/messages
或spring.messages.basename=messages/messages,classpath:moduleI/resources/messages/messages
但没有任何工作。有没有办法做到这一点?
解决方案
我终于找到了一个更好的解决方案,使用ResourceBundleMessageSource#addBasenames(...)
添加所有模块的消息。
编辑
在每个模块中,我重命名了消息文件,例如对于模块 I,我resources/messages/moduleI-messages.properties
有resources/messages/moduleI-messages_en.properties
. 然后我在该模块中定义了一个配置类来添加消息源文件。
@Configuration
public class ModuleConfig {
private final ResourceBundleMessageSource messageSource;
@PostConstruct
public void addMessageBaseName() {
messageSource.addBasenames( "messages/module1-messages" );
}
}
我确信可能有更好的方法,但我没有找到。
推荐阅读
- c# - 将类型作为变量传递,然后使用它
- spring-boot - CamelHttp 多部分/表单数据上传。camel-http4 和 camel-http-starter 之间的变化
- r - 从列中获取特定于“NA”值的预测
- python - 在while循环中删除数据框中的最后一列
- kubernetes - kubernetes: Find out actual pod status
- spring - 如果我立即返回 ServerResponse,ServerRequest.bodyToMono() 方法返回的 Mono 不会提取正文
- javascript - 工具提示中的 HTML 表格未使用 Bootstrap 4.3.1 显示
- c - 程序执行未按预期顺序发生
- mysql - 如何根据mysql中的兄弟列有条件地从json数组中检索第一次出现的子数组记录?
- java - 使用 java.nio.FileChannel 从两个不同的 JVM 同时写入和读取文本文件