如何用Spring注入MessageSource资源包?

时间:2017-06-01 13:12:40

标签: java spring internationalization

您有两个不同的消息包。如何将它们直接注入spring bean MessageSource

以下不起作用:

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

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

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

可能它的工作方式类似,但如何?我在文档中找不到任何示例。

这两个捆绑包都放在src/main/resources/

1 个答案:

答案 0 :(得分:2)

我猜你可以为你的消息源声明2个不同的bean,然后按名称注入它们:

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

然后在你的课堂上:

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