Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Spring注入MessageSource资源包?_Java_Spring_Internationalization - Fatal编程技术网

Java 如何使用Spring注入MessageSource资源包?

Java 如何使用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

嗨,我有两个不同的消息包。如何将它们直接注入Springbean
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)