Пользовательский стартер Spring Boot: как вы отправляете сообщения i18n в MessageSource?

Я пишу специальный стартер Spring Boot, который другие разработчики добавят в свои приложения, и он содержит готовые контроллеры и экраны пользовательского интерфейса.

Эти экраны пользовательского интерфейса интернационализированы, а ключи / значения i18n находятся в файле пакета:com/foo/wherever/i18n.properties.

Я хочу убедиться, что когда мой стартер загружен при запуске, эти i18n.properties доступны в приложенииMessageSource автоматически, чтобы мои страницы пользовательского интерфейса работали (визуализируются с помощью обычного Spring Controller + ViewResolver + View реализации)без того, чтобы разработчик приложения сам указывал этот файл.

Другими словами, они должны иметь возможность добавить мой стартер к своему пути к классам времени выполнения, и все «просто работает» без необходимости что-либо настраивать.

Теперь я обнаружил, что разработчик приложения может создавать свои собственныеsrc/main/resources/messages.properties файла также вручную настроить файл дополнительных сообщений вapplication.properties:

spring.messages.basename = messages, com.foo.wherever.i18n

И это будет работать.

Однако для этого требуется следующее:

Они должны вручную настроитьspring.messages.basename собственность - это не автомат. а такжеУ них должны быть своиmessages.properties файл в своем приложении classpath. Еслиmessages.properties файл не существует,spring.messages.basename даже не работает. Даже если они не заботятся о i18n, это все еще требуется - не желательно.

Я полагаюмог переместить мой файл i18n.properties в файл classpath: /messages.properties в стартовом файле .jar, но это не кажется хорошим решением: если у разработчика приложения есть собственный файл messages.properties, только один из них будет прочитан , что приводит к пропущенным значениям сообщения.

Кажется, как будто Spring BootMessageSourceAutoConfiguration должен иметь концепциюCompositeMessageSource который перебирает один или несколькоMessageSource экземпляры, которые доступны (иOrdered) в Spring ApplicationContext итот используется DispatcherServlet. Это позволит любому участнику внести свой вклад в доступные сообщения, просто объявивMessageSource в их автоконфиге

Можно ли сделать то, что я прошу? Какое решение для разработчиков приложений является наиболее сложным?

Ответы на вопрос(3)

Ваш ответ на вопрос