How to display messages in Thymeleaf and Spring Boot?

30,705

Solution 1

Because I am using Spring Boot, the MessageSource is configured with a MessageSourceAutoConfiguration. These settings can be easily changed in the application.properties file. In my case I had to add the following to this file:

spring.messages.basename=i18n/messages

Solution 2

And add this to your application.properties file

#messages
spring.messages.basename=i18n/messages

and store the file n the correct folder as specified above.

you don't need messageSource bean

Solution 3

The way I resolved the i18n messaging was to define the MessagesSource bean like you. Additionally I had to override the getValidator() method of the WebMvcConfigurerAdapter.

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

After this, it worked for me.

Solution 4

Is there a file messages.properties (no _de) present to allow fallback? Does it work? Is your browser set to locale DE_de ?

Share:
30,705
stevecross
Author by

stevecross

Updated on July 09, 2022

Comments

  • stevecross
    stevecross almost 2 years

    I created a Spring Boot web application that uses Thymeleaf as the template engine. I configured the MessageSource to look for messages in a subfolder:

    @Bean
    public MessageSource messageSource() {
        final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    
        messageSource.setBasename("i18n/messages");
        messageSource.setFallbackToSystemLocale(false);
        messageSource.setCacheSeconds(0);
    
        return messageSource;
    }
    

    In this folder I created the file messages_de.properties with the content ticket.type.BUG=Fehler. In my template I try to display the text like this:

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

    But when the page is rendered, I get the following:

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

    What am I missing? Do I have to configure any additional beans?

    P.S.:

    On the 'server side' I am able to obtain the message using MessageSource#getMessage("ticket.type.BUG", null, Locale.GERMANY).