Search code examples
javaspring-mvcinternationalizationthymeleaf

Spring 4 Framework Internationalization not identify message from resource properties file with thymeleaf


Using new spring version, with thymeleaf, is not my specialty, with gradle, I try a lot ways change position files and configurations of basename and still receiving ??welcome.message_**?? on template result.

@EnableAutoConfiguration
@Configuration
@ComponentScan
public class Application {

[...]

@Bean
public ReloadableResourceBundleMessageSource resourceBundleMessageSource(){
        ReloadableResourceBundleMessageSource messageSource=new ReloadableResourceBundleMessageSource();
        String[] resources= {"/WEB-INF/locale/messages", "WEB-INF/locale/messages", "locale/messages", "i18n", "locale"};
        messageSource.setBasenames(resources);
        messageSource.setFallbackToSystemLocale(true);
        messageSource.setDefaultEncoding("UTF-8");
        return messageSource;
    }

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

@Bean
public SessionLocaleResolver sessionLocaleResolver(){
    SessionLocaleResolver localeResolver=new SessionLocaleResolver();
    localeResolver.setDefaultLocale(new Locale("pt","BR"));
    return localeResolver;
}

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

Template:

<h1 th:text="#{welcome.message}">Welcome!</h1>

have 2 properties on src/java/webapp/WEB-INF/local/messages.properties and src/java/webapp/WEB-INF/local/messages_pt_BR.properties

github project: https://github.com/brunoguerra/springtutorial/tree/master/web-scure-jpa

Thanks for any ideia


Solution

  • After walk around I found samples from spring-projects on github. The solution is very simple, just define public MessageSource messageSource() on your MVC configurer instead public ReloadableResourceBundleMessageSource resourceBundleMessageSource() on application configurer.

    @Configuration
    @EnableWebMvc
    public class MvcConfig extends WebMvcConfigurerAdapter {
    
    [...]
    
    @Bean    
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("/WEB-INF/messages/messages");
        return messageSource;
    }