web-dev-qa-db-de.com

Wie werden Meldungen in Thymeleaf und Spring Boot angezeigt?

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.

16
stevecross

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
27
stevecross

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

4
Faraj Farook

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.

2
Michael RHöse

Gibt es eine Datei messages.properties (kein _de), um einen Fallback zuzulassen? Funktioniert es? Ist Ihr Browser auf locale DE_de eingestellt?

0
fkurth

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

0
Paul John