Java 如何使用Spring注入MessageSource资源包?
嗨,我有两个不同的消息包。如何将它们直接注入SpringbeanJava 如何使用Spring注入MessageSource资源包?,java,spring,internationalization,Java,Spring,Internationalization,嗨,我有两个不同的消息包。如何将它们直接注入SpringbeanMessageSource 以下操作不起作用: @Resource(name = "${messages_one_EB.properties}") private MessageSource messageSourceOne; @Resource(name = "${messages_two_EN.properties}") private MessageSource messageSourceTwo; 结果:java.lang
MessageSource
以下操作不起作用:
@Resource(name = "${messages_one_EB.properties}")
private MessageSource messageSourceOne;
@Resource(name = "${messages_two_EN.properties}")
private MessageSource messageSourceTwo;
结果:java.lang.IllegalArgumentException:无法解析占位符“messages\u one\u EB.properties”
也许它的工作原理相似,但如何呢?我在文档中找不到任何示例
这两个包都放在
src/main/resources/
下,我想您可以为消息源声明两个不同的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;
我想您可以为消息源声明两个不同的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;
使用
ReloadableResourceBundleMessageSource
为什么需要2个MessageSource
实例?只需在单个MessageSource
中为两者指定一个模式。使用ReloadableResourceBundleMessageSource
为什么需要2个MessageSource
实例?只需在一个MessageSource
中为两者指定一个模式。也许我应该补充一点,所有捆绑包都放在src/main/resources
中。在这种情况下使用的正确路径是省略类路径。因此:setBasename(i18n/messages2)
。也许我应该补充一点,所有捆绑包都放在src/main/resources
中。在这种情况下使用的正确路径是省略类路径。因此:setBasename(i18n/messages2)
。