多模块项目中的 Spring Boot i18n

aku*_*ma8 5 spring internationalization spring-boot application.properties

我有这个多模块项目:

Parent Pom
|
|----Main module (@SpringBootApplcation and application.properties)
|
|----Module I
|
|----Module II
|
|----Module III
Run Code Online (Sandbox Code Playgroud)

主模块依赖于其他模块,并且包含messages.propertiesmessages_fr.propertiesunderresources/messages/以及application.properties我定义MessageResourcebean 的位置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但没有一个有效。有办法实现这一点吗?

aku*_*ma8 4

我终于找到了一个更好的解决方案,使用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" );
    }
}

Run Code Online (Sandbox Code Playgroud)

我确信可能有更好的方法,但我没有找到。