2015-04-09 17 views
16

Şablon motoru olarak Thymeleaf kullanan bir Spring Boot web uygulaması oluşturdum. Ben bir alt klasörde mesajlar aramaya MessageSource yapılandırılmış:Thymeleaf ve Spring Boot'da mesajlar nasıl görüntülenir?

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

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

    return messageSource; 
} 

Bu klasörde ben içerik ticket.type.BUG=Fehler dosyayı messages_de.properties yarattı.

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

Ama sayfa işlendiğinde, aşağıdaki alıyorum:

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

ben eksik benim şablonunda böyle metni görüntülemek için deneyin? Herhangi bir ek fasülyeyi yapılandırmak zorunda mıyım?

P.S. .: 'sunucu tarafında' ı MessageSource#getMessage("ticket.type.BUG", null, Locale.GERMANY) kullanarak mesajı ulaşabilirim Açık

.

cevap

26

Spring Boot kullanıyorum, MessageSource, MessageSourceAutoConfiguration ile yapılandırıldı. Bu ayarlar application.properties dosyasında kolayca değiştirilebilir.

spring.messages.basename=i18n/messages 
+0

Bu akıllıdır. Her ne kadar spring.messages.basename sadece her dosya için önek anlamına gelir. Klasörleri dahil olduğunu bilmiyordum. – Incognito

+1

Aynı problem var ve bu yapılandırma var, ama bu benim için işe yaramaz .. – Raw

0

için başvurulan bir öğretici yedek özelliğini sağlamak için mevcut bir dosya messages.properties (hayır _de) İşte

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

var mı edilir? Çalışıyor mu? Tarayıcınız DE_de yerel ayarına ayarlandı mı?

+0

Evet (ingilizce). Hayır Evet. – stevecross

2

i18n mesajlaşmasını çözdüğüm yol, sizin gibi MessagesSource fasulyeyi tanımlamaktı. Ayrıca WebMvcConfigurerAdapter'un getValidator() yöntemini geçersiz kılmak zorunda kaldım.

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

Bundan sonra, benim için çalıştı.

+2

Bu benim için çözmez ve neden gerektiğini bilmiyorum. Bu yapılandırma, kullanmadığım JSR-303 doğrulama ile ilgili bir şey var. – stevecross

3

Ve application.properties dosyası

#messages 
spring.messages.basename=i18n/messages 

bu ekleyebilir ve dosyayı n yukarıda belirtildiği gibi doğru klasörü saklamak: Benim durumumda bu dosyaya aşağıdakileri eklemek zorunda kaldılar.

messageSource fasulye

+0

Zaten bu çözüm bulundu ve yayınladı. – stevecross

+4

Üzgünüm. Bunu görmüyorum. Btw bir dahaki sefere bir cevap olarak bunu seçebilir, bu yüzden bizim için açıkça görünür olacaktır.Ve yardım etmek için bir oylama yapmak zorunda değilsiniz. –

İlgili konular