Java中映射的ResorceBundle

Java中映射的ResorceBundle,java,map,resourcebundle,Java,Map,Resourcebundle,我正在尝试自己实现ResourceBundle。我想从数据库加载文本。 我被什么事缠住了 如何从Map对象以编程方式创建ResourceBundle?map对象将具有基于区域设置的国际化文本 谢谢, Deibys它是否必须是ResourceBundle?Spring提供了各种实现的抽象。标准实现由ResourceBundle支持,但也有其他替代方案,包括可以从地图填充的StaticMessageSource,以及由DB支持的第三方实现。非常简单: public class MapResource

我正在尝试自己实现ResourceBundle。我想从数据库加载文本。 我被什么事缠住了

如何从Map对象以编程方式创建ResourceBundle?map对象将具有基于区域设置的国际化文本

谢谢,
Deibys

它是否必须是
ResourceBundle
?Spring提供了各种实现的抽象。标准实现由
ResourceBundle
支持,但也有其他替代方案,包括可以从地图填充的
StaticMessageSource
,以及由DB支持的第三方实现。

非常简单:

public class MapResourceBundle extends ResourceBundle {

    Map<String, Object> map;

    public MapResourceBundle(Map<String, Object> map) {
        this.map = map;
    }

    @Override
    protected Object handleGetObject(String key) {
        return map.get(key);
    }

    @Override
    public Enumeration<String> getKeys() {
        return Collections.enumeration(map.keySet());
    }

}
公共类MapResourceBundle扩展了ResourceBundle{
地图;
公共地图资源包(地图地图){
this.map=map;
}
@凌驾
受保护对象handleGetObject(字符串键){
返回map.get(key);
}
@凌驾
公共枚举getKeys(){
返回Collections.enumeration(map.keySet());
}
}

在此之后,您可以使用
MapResourceBundle
(当然,在初始化之后)。

创建一个。实际上,我想使用:ResourceBundle.getBundle(BUNDLE\u NAME,FacesContext.getCurrentInstance().getViewRoot().getLocale(),CONTROL)这将在控件对象中返回一个ResourceBundle,在newBundle方法中,我应该基于一直在寻找的Map对象创建ResourceBundle。谢谢你的实施。我稍微修改了它,使其不需要构造函数中的映射,这样我就可以执行
ResourceBundle.getBundle(“my.custom.map.ResourceBundle”,locale).getString(key)
,其中
my.custom.map.ResourceBundle
是一个扩展
MapResourceBundle
的类。这样我就不会因为缺少默认值而得到异常constructor@smac89请随意更改实现,它只是一个草稿。您可以添加方法来管理私有映射实例,例如制作副本、添加值或添加默认构造函数。