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, где я определил компонент MessageResourcespring.messages.basename=messages/messages. Теперь я хотел бы поместить файлы messages.properties в каждый модуль. Например, для модуля I в src/main/resources/messages/messages.properties то же самое для модуля II. У меня вопрос: как добавить сообщения модуля в bean-компонент MessageResource, определенный в application.properties? Я пробовал несколько таких объявлений:

spring.messages.basename=messages/messages,classpath:/com/company/moduleI/resources/messages/messages или spring.messages.basename=messages/messages,classpath:moduleI/resources/messages/messages, но никто не работает. Есть ли способ добиться этого?

По умолчанию Maven копирует содержимое папки resource в корень пути к классам. Вы пробовали classpath:messages/messages?

Ken Bekov 26.12.2018 14:43

@KenBekov Я только что попробовал, но результат тот же

akuma8 26.12.2018 20:39

Проверьте, существует ли этот файл в корневом пути к классам (target). Если это не так, вы можете использовать плагин сборки Maven для копирования (и переименования) файлов из модулей зависимостей.

Ken Bekov 27.12.2018 07:21

@KenBekov Когда я заглянул внутрь основного модуля .jar, все остальные модули находятся в его папке lib. Файлы ресурсов каждого модуля находятся в корне пути к классам модуля. Я посмотрю на этот плагин сборки Maven. Я дам Вам знать. Спасибо за подсказку

akuma8 27.12.2018 11:00
4
4
657
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я наконец нашел лучшее решение, используя 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" );
    }
}

Я уверен, что может быть лучший способ пойти, но я его не нашел.

какие строки вы передали addBasenames, чтобы это работало?

Alistair Sykes 21.08.2020 11:54

Другие вопросы по теме