多模块项目中的Spring Boot国际化

5

我有一个多模块项目:

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,但都无法工作。有没有实现此功能的方法呢?

默认情况下,Maven会将“resource”文件夹的内容复制到类路径的根目录。你尝试过使用“classpath:messages / messages”吗? - Ken Bekov
@KenBekov 我刚刚尝试了一下,但是结果一样。 - akuma8
检查根类路径(target)中是否存在此文件。如果不存在,则可以使用Maven汇编插件从依赖模块中复制(并重命名)文件。 - Ken Bekov
@KenBekov 当我查看主模块的 .jar 文件时,所有其他模块都在其 lib 文件夹中。每个模块的资源文件位于模块类路径的根目录下。我会研究一下 Maven 组装插件。我会告诉你的。谢谢这个提示。 - akuma8
1个回答

4

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


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

你传递了哪些字符串给 addBasenames 以使其工作? - Alistair Sykes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接