2015-04-09 2 views
16

Ich habe eine Spring Boot-Webanwendung erstellt, die Thymeleaf als Vorlage verwendet. Ich baut die MessageSource für Nachrichten in einem Unterordner suchen:Wie werden Meldungen in Thymeleaf und Spring Boot angezeigt?

@Bean 
public MessageSource messageSource() { 
    final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 

    messageSource.setBasename("i18n/messages"); 
    messageSource.setFallbackToSystemLocale(false); 
    messageSource.setCacheSeconds(0); 

    return messageSource; 
} 

In diesem Ordner erstellt ich die Datei messages_de.properties mit dem Inhalt ticket.type.BUG=Fehler. In meiner Vorlage versuche ich, den Text wie folgt angezeigt:

<p th:text="#{ticket.type.BUG}">BUG</p> 

Aber wenn die Seite gerendert wird, erhalte ich folgendes:

<p>??ticket.type.BUG_de_DE??</p> 

Was bin ich? Muss ich zusätzliche Beans konfigurieren?

P. S .:

Auf der 'Server-Seite:' Ich bin in der Lage, die Nachricht zu erhalten MessageSource#getMessage("ticket.type.BUG", null, Locale.GERMANY) verwenden.

Antwort

26

Da ich Spring Boot verwende, ist die MessageSource mit einer MessageSourceAutoConfiguration konfiguriert. Diese Einstellungen können einfach in der application.properties Datei geändert werden. In meinem Fall hatte ich folgende zu dieser Datei hinzuzufügen:

spring.messages.basename=i18n/messages 
+0

Das ist schlau. Ich denke, 'spring.messages.basename' bezieht sich nur auf das Präfix für jede Datei. Wusste nicht, dass es die Ordner enthielt. – Incognito

+1

Ich habe das gleiche Problem und hat diese Konfiguration, aber das funktioniert nicht für mich .. – Raw

0

Die Nachrichtenquelle Classpath relativ sein:

messageSource.setBasename(" classpath:i18n/messages"); 

Hier ist ein Tutorial ich für thymeleaf und Feder bezeichnet = http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html

+0

Ich denkt nicht. Ich habe meine Frage aktualisiert. Wenn ich 'classpath:' vorstelle, kann ich auch keine Nachrichten im Java-Code erhalten. – stevecross

0

Gibt es eine Datei messages.properties (keine _de) vorhanden Rückfall zu erlauben? Funktioniert es? Ist Ihr Browser auf die Ländereinstellung DE_de eingestellt?

+0

Ja (englisch). Nein Ja. – stevecross

2

Die Art und Weise, wie ich das i18n Messaging gelöst habe, war 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 funktionierte es für mich.

+2

Das löst es nicht für mich und ich weiß nicht warum es so sein soll. Diese Konfiguration hat etwas mit der JSR-303-Validierung zu tun, die ich nicht verwende. – stevecross

3

Und fügen Sie diese zu Ihrer application.properties Datei

#messages 
spring.messages.basename=i18n/messages 

und speichern Sie die Datei n die richtigen Ordner wie oben angegeben.

Sie brauchen nicht messageSource Bohne

+0

Ich habe diese Lösung bereits gefunden und gepostet. – stevecross

+4

Entschuldigung. Das sehe ich nicht. Beim nächsten Mal können Sie das als Antwort auswählen, damit es für uns deutlich sichtbar ist.Und Sie müssen nicht abstimmen, wenn Sie helfen wollen. –