I18n in Spring boot + Thymeleaf

34,886

Your application should extends WebMvcConfigurerAdapter

@SpringBootApplication
public class NerveNetApplication extends WebMvcConfigurerAdapter {

    public static void main(String[] args) {
        SpringApplication.run(NerveNetApplication.class, args);
    }

    @Bean
    public LocaleResolver localeResolver() {
        return new CookieLocaleResolver();
    }

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        lci.setParamName("lang");
        return lci;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }
}

Then on browser you can switch language with param lang Example: http://localhost:1111/?lang=kh which messages_kh.properites will store the content of Khmer language.

Share:
34,886
No One
Author by

No One

Passionate about programming, video games, music and travelling. Currently living in New Zealand.

Updated on July 23, 2020

Comments

  • No One
    No One almost 4 years

    I'm trying to make a multilanguage application using Spring boot and Thymeleaf.

    I made few properties files to save the different messages but I'm only able to display it in my browser language (I tried extensions to change browser locale but they seem to not be working), anyway I wanted to put a button in my website to do this duty (changing the language), but I don't know how or where to find how to manage this.

    Gonna show you my config:

    Structure of the project

    Structure of the project


    I18n configuration class

    import org.springframework.context.MessageSource;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.support.ResourceBundleMessageSource;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    
    @Configuration
    @EnableWebMvc
    public class I18nConfiguration extends WebMvcConfigurerAdapter {
    
        @Bean
        public MessageSource messageSource() {
            ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
            messageSource.setBasename("i18n/messages");
            messageSource.setDefaultEncoding("UTF-8");
            return messageSource;
        }
    
    }
    

    Thymleaf HTML page

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org"
        th:with="lang=${#locale.language}" th:lang="${lang}">
    
    <head>
    <title>Spring Boot and Thymeleaf example</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
        <h3>Spring Boot and Thymeleaf</h3>
        <p>Hello World!</p>
        <p th:text="${nombre}"></p>
        <h1 th:text="#{hello.world}">FooBar</h1>
    </body>
    </html>
    

    Messages (Properties files)

    messages_en_US.properties

    hello.world = Hello people
    

    messages_es.properties

    hello.world = Hola gente
    

    Actually the message is displaying in Spanish, not sure how would I change this, so if you could help me thank you very much.

    There's another question that comes to my mind... How would I get the messages from the Database instead from the properties file?