简体   繁体   中英

How to inject MessageSource resource bundle with Spring?

Hi have two different message bundles. How can I directly inject them into a spring bean MessageSource ?

The following does not work:

@Resource(name = "${messages_one_EB.properties}")
private MessageSource messageSourceOne;

@Resource(name = "${messages_two_EN.properties}")
private MessageSource messageSourceTwo;

Result: java.lang.IllegalArgumentException: Could not resolve placeholder 'messages_one_EB.properties'

Probably it works similar, but how? I could not find any example in the docs.

Both bundles are placed under src/main/resources/

I guess you can declare 2 different beans for your message sources and then inject them by name:

@Bean
public MessageSource messageSource1() {
    final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();

    messageSource.setBasename("classpath:i18n/messages1");
    messageSource.setFallbackToSystemLocale(false);
    messageSource.setCacheSeconds(0);

    return messageSource;
}

@Bean
public MessageSource messageSource2() {
    final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();

    messageSource.setBasename("classpath:i18n/messages2");
    messageSource.setFallbackToSystemLocale(false);
    messageSource.setCacheSeconds(0);

    return messageSource;
}

Then in your class:

@Resource(name = "messageSource1")
private MessageSource messageSourceOne;
@Resource(name = "messageSource2")
private MessageSource messageSourceTwo;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM