【问题标题】:How to inject MessageSource resource bundle with Spring?如何使用 Spring 注入 MessageSource 资源包?
【发布时间】:2017-06-01 13:12:40
【问题描述】:

您好有两个不同的消息包。如何将它们直接注入到 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/

【问题讨论】:

  • 使用ReloadableResourceBundleMessageSource
  • 为什么需要 2 个 MessageSource 实例?只需在一个 MessageSource 中为两者指定一个模式。

标签: java spring internationalization


【解决方案1】:

我猜你可以为你的消息源声明 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;

【讨论】:

  • 也许我应该补充一点,所有捆绑包都放在src/main/resources。在这种情况下使用的正确路径是省略类路径。因此:setBasename(i18n/messages2).
猜你喜欢
  • 1970-01-01
  • 2011-03-30
  • 2015-08-05
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
相关资源
最近更新 更多