找不到MessageSource的ResourceBundle [messages]:找不到基本名称消息的包


问题内容

在applicationContext.xml中,我像这样定义了MessageSource:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>/WEB-INF/i18n/messages</value>
        </list>
    </property>
</bean>

我还需要加载所有本地化的消息,因此我为此编写了自己的类:

public class ErpMessageSource extends ResourceBundleMessageSource {

    public Map<String, String> getMessages(String basename, Locale locale) {
        Set<String> keys = getKeys(basename, locale);
        Map<String, String> m = new HashMap<String, String>();

        for (String key : keys) {
            try {
                m.put(key, getMessage(key, null, locale));              
            } catch (Exception e) {
                System.err.println(key + " - " + e.getLocalizedMessage());
            }
        }

        return m;
    }

    private Set<String> getKeys(String basename, Locale locale) {
        ResourceBundle bundle = getResourceBundle(basename, locale);
        return bundle.keySet();
    }

}

我对此有2个问题:

问题1: 我的邮件文件位于WEB-INF /
i18n目录下。它仅包含2个文件:messages_en.properties和messages_hr.properties。

如果我尝试运行上述代码,则会收到警告:“找不到MessageSource的ResourceBundle
[messages]:找不到基本名称消息的包,语言环境为’local locale’”,然后是NullPointerException。

如果我将邮件文件移动到WEB-INF / classes文件夹,问题消失了,但是我遇到了第二个问题。

问题2: 如果在消息位于WEB-INF /
classes目录下时运行上述代码,我会得到异常消息:“在代码’some.code’下找不到区域设置为’locale’的消息” 。

问题是:如何通过将消息保留在WEB-INF / i18n文件夹中来避免第一个问题,并且我需要第二个问题的解决方案,因为我真的不知道发生了什么。


问题答案:

您可能只需要将资源文件夹添加到项目的类路径中。

尝试执行以下操作:

右键单击Package Explorer视图中的项目名称—> Properties —> Java Build Path
—>停留在Source选项卡(默认情况下处于打开状态)—>单击Folder
—>列表项目内所有文件夹中的所有文件夹现在应显示—>在包含消息属性文件的文件夹上打勾

重建项目并尝试运行。