我无法找到一种方法来获取ReloadableResourceBundleMessageSource可重新加载的功能,并且可以通过语言环境一次访问Properties / all消息。 ReloadableResourceBundleMessageSource API不提供除代码和lang之外的任何内容的访问权限......由于成员可见性,ReloadableResourceBundleMessageSource甚至无法扩展为访问属性。
知道如何拥有可重新加载的属性并立即访问它们吗?
答案 0 :(得分:1)
我只是对此进行了编码,希望它有效但你需要优化一些东西,我想这个方法可以是静态的,或者如果你需要它来成为一个bean,那么从基类中获取basename和locale。
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;
}
}
这将从基类中获取基本名称。