在applicationContext.xml文件中,我定义了如下的MessageSource:
我还需要加载所有本地化的消息,因此我已经为此创建了自己的类:
我有两个问题:
问题1: 我的消息文件位于WEB-INF/i18n目录下。它只包含2个文件:messages_en.properties和messages_hr.properties。
如果我尝试运行以上代码,我会收到警告:“MessageSource找不到基础名称为'messages'的资源束,区域设置为'some locale'”,随后是NullPointerException异常。
如果我将消息文件移动到WEB-INF/classes文件夹中,则问题消失,但我遇到了第二个问题。
问题2: 如果我在消息位于WEB-INF/classes目录下运行上述代码,即使所有键都正确加载,我仍会收到异常:“在'some locale'区域设置下找不到代码为'some.code'的消息”。
问题是:如何通过保留消息在WEB-INF/i18n文件夹中来避免问题1,并且我需要解决第二个问题,因为我真的不知道发生了什么。
<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();
}
}
我有两个问题:
问题1: 我的消息文件位于WEB-INF/i18n目录下。它只包含2个文件:messages_en.properties和messages_hr.properties。
如果我尝试运行以上代码,我会收到警告:“MessageSource找不到基础名称为'messages'的资源束,区域设置为'some locale'”,随后是NullPointerException异常。
如果我将消息文件移动到WEB-INF/classes文件夹中,则问题消失,但我遇到了第二个问题。
问题2: 如果我在消息位于WEB-INF/classes目录下运行上述代码,即使所有键都正确加载,我仍会收到异常:“在'some locale'区域设置下找不到代码为'some.code'的消息”。
问题是:如何通过保留消息在WEB-INF/i18n文件夹中来避免问题1,并且我需要解决第二个问题,因为我真的不知道发生了什么。