2015-04-09 14 views
16

Ho creato un'applicazione web Spring Boot che utilizza Thymeleaf come motore di template. Ho configurato il MessageSource per cercare i messaggi in una sottocartella:Come visualizzare i messaggi in Thymeleaf e Spring Boot?

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

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

    return messageSource; 
} 

In questa cartella ho creato il file messages_de.properties con il contenuto ticket.type.BUG=Fehler. Nel mio modello cerco di visualizzare il testo in questo modo:

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

Ma quando la pagina viene visualizzata, ottengo il seguente:

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

Che cosa mi manca? Devo configurare altri bean aggiuntivi?

P.S .:

sul 'lato server' sono in grado di ottenere il messaggio utilizzando MessageSource#getMessage("ticket.type.BUG", null, Locale.GERMANY).

risposta

26

Poiché utilizzo Spring Boot, lo MessageSource è configurato con MessageSourceAutoConfiguration. Queste impostazioni possono essere facilmente modificate nel file application.properties. Nel mio caso ho dovuto aggiungere la seguente al file:

spring.messages.basename=i18n/messages 
+0

Questo è intelligente. Io però "spring.messages.basename" si riferisce solo al prefisso per ogni file. Non sapevo che includeva le cartelle. – Incognito

+1

Ho lo stesso problema e ho questa configurazione, ma questo non funziona per me .. – Raw

0

La fonte messaggio sia rispetto al percorso di classe:

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

Ecco un tutorial ho fatto riferimento per thymeleaf e la primavera = http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html

+0

Io non la penso così. Ho aggiornato la mia domanda. Quando antepongo 'classpath:' Non riesco a ottenere messaggi anche nel codice Java. – stevecross

0

C'è un file messages.properties (senza _de) presenti per permettere di ripiego? Funziona? Il tuo browser è impostato sulle impostazioni internazionali DE_de?

+0

Sì (inglese). No sì. – stevecross

2

Il modo in cui ho risolto la messaggistica i18n era definire il bean MessagesSource come te. Inoltre ho dovuto ignorare il metodo getValidator() di WebMvcConfigurerAdapter.

@Override 
public Validator getValidator() { 
    LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); 
    validator.setValidationMessageSource(messageSource()); 
    return validator; 
} 

Dopo questo, ha funzionato per me.

+2

Questo non lo risolve per me e non so perché dovrebbe. Questa configurazione ha qualcosa a che fare con la convalida JSR-303 che non uso. – stevecross

3

e aggiungere questo al vostro file di application.properties

#messages 
spring.messages.basename=i18n/messages 

e memorizzare il file n cartella corretta come sopra specificato.

non è necessario messageSource fagioli

+0

Ho già trovato e pubblicato questa soluzione. – stevecross

+4

Siamo spiacenti. Non lo vedo. A proposito, la prossima volta puoi selezionarlo come risposta, quindi sarà chiaramente visibile per noi.E non devi minimizzare lo sforzo per aiutare. –

Problemi correlati