我想不出一种方法来获得 ReloadableResourceBundleMessageSource 可重新加载能力并通过语言环境一次访问属性/所有消息。ReloadableResourceBundleMessageSource API 不提供对任何内容的访问,而是通过代码和语言访问单个消息...由于成员可见性,ReloadableResourceBundleMessageSource 甚至无法扩展为访问属性。
知道如何拥有可重新加载的属性并一次访问它们吗?
我想不出一种方法来获得 ReloadableResourceBundleMessageSource 可重新加载能力并通过语言环境一次访问属性/所有消息。ReloadableResourceBundleMessageSource API 不提供对任何内容的访问,而是通过代码和语言访问单个消息...由于成员可见性,ReloadableResourceBundleMessageSource 甚至无法扩展为访问属性。
知道如何拥有可重新加载的属性并一次访问它们吗?
我刚刚编写了这个代码,希望它可以工作,但你需要优化一些东西,我想这个方法可以是静态的,或者如果你需要它成为一个 bean,然后从基类中获取基本名称和语言环境。
package mx.gob.jgtjo.apps.schedule.web.utils;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
public class CustomMessageResolver extends
ReloadableResourceBundleMessageSource {
public CustomMessageResolver() {
}
public Map<Object, Object> loadAllMessagesByLocale(String basename,
Locale locale) {
List<String> fileNames = super
.calculateAllFilenames(basename, locale);
Map<Object, Object> messagesByLocale = new HashMap<Object, Object>();
for (String fileName : fileNames) {
PropertiesHolder holder = super.getProperties(fileName);
for (Entry<Object, Object> entry : holder.getProperties()
.entrySet()) {
messagesByLocale.put(entry.getKey(), entry.getValue());
}
}
return messagesByLocale;
}
}
更新:我找到了一种更好的方法来从指定的基本名称中获取所有属性:
public class CustomMessageResolver extends
ReloadableResourceBundleMessageSource {
public CustomMessageResolver() {
}
public Map<Object, Object> loadAllMessagesByLocale(String basename,
Locale locale) {
Map<Object, Object> messagesByLocale = new HashMap<Object, Object>();
PropertiesHolder holder = super.getMergedProperties(locale);
for (Entry<Object, Object> entry : holder.getProperties().entrySet()) {
messagesByLocale.put(entry.getKey(), entry.getValue());
}
return messagesByLocale;
}
}
这将从基类中获取基本名称。