Spring 在多模块项目中启动 i18n

Spring Boot i18n in multi modules project

我有这个多模块项目:

Parent Pom
|
|----Main module (@SpringBootApplcation and application.properties)
|
|----Module I
|
|----Module II
|
|----Module III

主模块依赖于其他模块,包含 resources/messages/ 下的 messages.propertiesmessages_fr.properties 以及我定义 MessageResource bean 的 application.properties spring.messages.basename=messages/messages。 现在我想把 messages.properties 文件放在每个模块中。例如,对于模块 I,在 src/main/resources/messages/messages.properties 下对于模块 II 也是如此。 我的问题是,如何在 application.properties 中定义的 MessageResource bean 中添加模块的消息? 我尝试了几个这样的声明:

spring.messages.basename=messages/messages,classpath:/com/company/moduleI/resources/messages/messagesspring.messages.basename=messages/messages,classpath:moduleI/resources/messages/messages 但 none 有效。 有办法实现吗?

我终于找到了一个更好的解决方案,使用 ResourceBundleMessageSource#addBasenames(...) 添加所有模块的消息。

编辑

在每个模块中,我重命名了消息文件,例如对于模块 I,我有 resources/messages/moduleI-messages.propertiesresources/messages/moduleI-messages_en.properties。 然后我在该模块中定义了一个配置 class 来添加消息源文件。

@Configuration
public class ModuleConfig {
    private final ResourceBundleMessageSource messageSource;

    @PostConstruct
    public void addMessageBaseName() {
        messageSource.addBasenames( "messages/module1-messages" );
    }
}

我相信还有更好的方法,但我没找到。