Ich habe eine Spring Boot-Webanwendung erstellt, die Thymeleaf als Vorlagen-Engine verwendet. Ich habe das MessageSource
so konfiguriert, dass es nach Nachrichten in einem Unterordner sucht:
@Bean
public MessageSource messageSource() {
final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("i18n/messages");
messageSource.setFallbackToSystemLocale(false);
messageSource.setCacheSeconds(0);
return messageSource;
}
In diesem Ordner habe ich die Datei messages_de.properties
mit dem Inhalt ticket.type.BUG=Fehler
erstellt. In meiner Vorlage versuche ich, den Text so anzuzeigen:
<p th:text="#{ticket.type.BUG}">BUG</p>
Wenn die Seite gerendert wird, erhalte ich Folgendes:
<p>??ticket.type.BUG_de_DE??</p>
Was vermisse ich? Muss ich zusätzliche Beans konfigurieren?
P.S .:
Auf der Serverseite kann ich die Nachricht mit MessageSource#getMessage("ticket.type.BUG", null, Locale.GERMANY)
abrufen.
Da ich Spring Boot verwende, ist die MessageSource
mit einer MessageSourceAutoConfiguration
konfiguriert. Diese Einstellungen können leicht in der application.properties
-Datei geändert werden. In meinem Fall musste ich dieser Datei Folgendes hinzufügen:
spring.messages.basename=i18n/messages
Und fügen Sie dies Ihrer application.properties
-Datei hinzu
#messages
spring.messages.basename=i18n/messages
und speichern Sie die Datei im richtigen Ordner wie oben angegeben.
sie brauchen keine messageSource
Bean
Die Art und Weise, wie ich das i18n-Messaging auflöste, bestand darin, die MessagesSource
-Bean wie Sie zu definieren. Zusätzlich musste ich die getValidator()
-Methode der WebMvcConfigurerAdapter
überschreiben.
@Override
public Validator getValidator() {
LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
validator.setValidationMessageSource( messageSource() );
return validator;
}
Danach hat es für mich funktioniert.
Gibt es eine Datei messages.properties
(kein _de
), um einen Fallback zuzulassen? Funktioniert es? Ist Ihr Browser auf locale DE_de
eingestellt?
Die Nachrichtenquelle ist relativ zum Klassenpfad:
messageSource.setBasename(" classpath:i18n/messages");
Hier ist ein Tutorial für Thymeleaf und Frühling = http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html