spring – 放置在文件夹中时找不到MessageSource的ResourceBundle

我正在尝试使用Spring的Message Source资源包.这是我这样做的方式:

@Component
public class MessageResolver implements MessageSourceAware {

    @Autowired
    private MessageSource messageSource;

    public void setMessageSource(MessageSource messageSource) {
        this.messageSource = messageSource;
    }

    public String getMessage(){
        return messageSource.getMessage("user.welcome", new Object[]{"Rama"} , Locale.US);
    }

}

这是我的文件夹结构:

messages_en_US.properties只包含一行:

user.welcome=Welcome {0}

这是使用的xml配置:

<bean name="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename">
        <value>resourcebundles/messages</value>
    </property>
</bean>

这是我得到的错误:

WARNING: ResourceBundle [resourcebundles/messages] not found for MessageSource: Can't find bundle for base name resourcebundles/messages, locale en_US
Exception in thread "main" org.springframework.context.NoSuchMessageException: No message found under code 'user.welcome' for locale 'en_US'.

但是,如果我将资源包直接移动到资源文件夹下,它工作正常.在这种情况下,这是我正在使用的xml配置:

<bean name="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename">
    <value>messages</value>
</property>

是的,如果我必须使用ResourceBundleMessageSource,我应该将我的资源包直接放在资源下?如果我必须将它保存在指定的文件夹中,还有其他方法可以使这个工作吗?

谢谢!

解决方法:

将配置更改为xml文件中的messageSource bean的以下内容.

<bean name="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basename"> 
        <value>classpath*:resourcebundles/messages</value> 
    </property> 
</bean>

由于所有属性文件都在java的类路径中,因此您需要使用前缀classpath *定义路径:否则它将查看应用程序的Web目录.

希望这对你有所帮助.干杯.

上一篇:国际化程序实现原理


下一篇:java.util.MissingResourceException:找不到基本名称’property_file name’的包,locale en_US