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 (undOrdered) 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?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage