Why Thymeleaf International only works with ResourceBundleMessageSource

So, helping to answer This question Thymeleaf + Spring (not Boot) - how to display messages from messageSource

I found that if you use ReloadableResourceBundleMessageSource, this will not work. Would Timeleaf display? App.name_pt_BR ?? instead of the expected result.

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

    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("/i18n/messages");
    messageSource.setFallbackToSystemLocale(false);
    messageSource.setCacheSeconds(0);
    messageSource.setDefaultEncoding("UTF-8");

    return messageSource;
}

when I switch to the bottom, it worked as expected.

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

    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasename("/i18n/messages");
    messageSource.setFallbackToSystemLocale(false);
    messageSource.setCacheSeconds(0);
    messageSource.setDefaultEncoding("UTF-8");

    return messageSource;
}

Why cannot the ReloadableResourceBundleMessageSource be used?

adding code for this question: github

+1
source share
1 answer

Found an answer!

In javadocs for ReloadableResouceBundleMessageSource

Spring - MessageSource, , , Spring ApplicationContext. JDK- ResourceBundleMessageSource, , PropertiesPersister Spring . , . XML.

, , "basenames", , "basenames" ResourceBundleMessageSource. ResourceBundle, , Spring ( , ). "classpath:" , "cacheSeconds", "-1" ( ), .

- WEB-INF: . "WEB-INF/messages" "WEB-INF/messages.properties", "WEB-INF/messages_en.properties", "WEB-INF/messages.xml", "WEB-INF/messages_en.xml" .. , - .

MessageSource ApplicationContext: DefaultResourceLoader , ApplicationContext, . .

.

@Bean
public MessageSource messageSource()
{
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("messages");
    messageSource.setFallbackToSystemLocale(false);
    messageSource.setCacheSeconds(0);
    messageSource.setDefaultEncoding("UTF-8");
    return messageSource;
}

setBasename()

@Bean
public MessageSource messageSource()
{
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("classpath:messages");
    messageSource.setFallbackToSystemLocale(false);
    messageSource.setCacheSeconds(0);
    messageSource.setDefaultEncoding("UTF-8");
    return messageSource;
}
+1

All Articles