首页 > 解决方案 > 多模块项目中的 Spring Boot i18n

问题描述

我有这个多模块项目:

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

主模块依赖于其他模块并包含messages.propertiesmessages_fr.propertiesresources/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/messagesspring.messages.basename=messages/messages,classpath:moduleI/resources/messages/messages但没有任何工作。有没有办法做到这一点?

标签: springspring-bootinternationalizationapplication.properties

解决方案


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

编辑

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

@Configuration
public class ModuleConfig {
    private final ResourceBundleMessageSource messageSource;

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

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


推荐阅读