ResourceBundleMessageSource setBaseName 方法允许前缀“file”吗?

问题描述 投票:0回答:1

尝试从 junit 测试为 ResourceBundleMessageSource spring 类设置基名,当测试尝试获取消息时,我收到以下“在密钥下找不到消息......”。我有下面的下一个配置用于测试。 MessageSourceHolder 是一个静态类,用于保存消息源。 setBasename参数有问题吗?不允许使用前缀“file”?我在“src/main/resources/i18n”下确实有一个 message.properties 文件。

   AbstractResourceBasedMessageSource messageSource = new ResourceBundleMessageSource();
   messageSource.setBasename("file:src/main/resources/i18n/messages");
   messageSource.setFallbackToSystemLocale(false);
   MessageSourceHolder.setMessageSource(messageSource);

如果我这样做,它会起作用:

    File file = Paths.get("src/main/resources/i18n/messages.properties").toFile();
    Properties properties = new Properties();
    properties.load(new FileReader(file));        
    
    AbstractResourceBasedMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setCommonMessages(properties);
    MessageSourceHolder.setMessageSource(messageSource);
spring properties internationalization
1个回答
0
投票

我注意到 ResourceBundleMessageSource 类文档中写着:

基本名称遵循 ResourceBundle 约定:本质上, 完全限定的类路径位置

所以它不允许前缀文件。 ReloadableResourceBundleMessageSource 类允许使用前缀,因为它遵循资源约定。

© www.soinside.com 2019 - 2024. All rights reserved.