Bruno Guerra
Bruno Guerra

Reputation: 1189

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

Upvotes: 1

Views: 6213

Answers (2)

arai
arai

Reputation: 400

The bean name should be messageSource We can do it either

@Bean(name ="messageSource")
public MessageSource anyName() {} 

Or

public MessageSource messageSource() {}

Upvotes: 0

Bruno Guerra
Bruno Guerra

Reputation: 1189

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;
}

Upvotes: 4

Related Questions