Custom Spring Boot-Starter: Wie tragen Sie i18n-Nachrichten zur MessageSource bei?
Ich schreibe einen benutzerdefinierten Spring Boot-Starter, den andere Entwickler in ihre Anwendungen einfügen. Dieser Starter enthält sofort einsatzbereite Controller und Benutzeroberflächen.
Diese UI-Bildschirme sind internationalisiert und die i18n-Schlüssel / -Werte befinden sich in einer Paketdatei:com/foo/wherever/i18n.properties
.
Ich möchte sicherstellen, dass diese i18n.properties im @ der Anwendung verfügbar sind, wenn mein Starter beim Start geladen wirMessageSource
automatisch, damit meine UI-Seiten funktionieren (gerendert über normale Spring Controller + ViewResolver + View-Implementierungen)ohne dass der App-Entwickler diese Datei selbst angeben muss.
it anderen Worten, sie sollten in der Lage sein, meinen Starter zu ihrem Laufzeitklassenpfad hinzuzufügen, und alles 'funktioniert einfach', ohne etwas konfigurieren zu müsse
Nun habe ich festgestellt, dass der App-Entwickler seine eigenen erstellen kannsrc/main/resources/messages.properties
Dateiun konfigurieren Sie die zusätzliche Nachrichtendatei manuell inapplication.properties
:
spring.messages.basename = messages, com.foo.wherever.i18n
Und das wird funktionieren.
Dies erfordert jedoch beide der folgenden Punkte:
Sie müssen das @ manuell konfigurierspring.messages.basename
Eigenschaft - es ist nicht automatisch. unie müssen ihre eigenen habmessages.properties
-Datei in ihrem Anwendungsklassenpfad. Wenn einmessages.properties
Die Datei existiert nicht,spring.messages.basename
funktioniert nicht einmal. Auch wenn sie sich nicht für i18n interessieren, ist dies immer noch erforderlich - nicht wünschenswert.Ich nehme an, ichkönnte verschiebe meine i18n.properties-Datei in einen Klassenpfad: /messages.properties-Datei in der Starter-.jar-Datei, aber das scheint keine gute Lösung zu sein: Wenn der App-Entwickler eine eigene messages.properties-Datei hätte, wäre nur eine davon Lesen, was zu fehlenden Nachrichtenwerten führt.
Es scheint, als ob Spring Boot MessageSourceAutoConfiguration sollte ein Konzept von einem @ habCompositeMessageSource
das iteriert über ein oder mehrereMessageSource
Instanzen, die verfügbar sind (undOrder
ed) im Spring ApplicationContext undDa wird vom DispatcherServlet verwendet. Dies würde jedem Starter erlauben, zu den verfügbaren Nachrichten beizutragen, indem er einfach ein @ deklarierMessageSource
in ihrer Autokonfiguration
Ist es möglich zu tun was ich frage? Was ist die praktischste Lösung für den App-Entwickler?