Java多资源包
我想将不同包中的多个属性文件作为ResourceBundle加载。我可以在Java中实现这一点吗扩展Java多资源包,java,resourcebundle,Java,Resourcebundle,我想将不同包中的多个属性文件作为ResourceBundle加载。我可以在Java中实现这一点吗扩展Java.util.PropertyResourceBundle并调用setParent ResourceBundle.Control()控制ResourceBundle的文件列表。您可以覆盖 获取CandidateLocales和toBundleName。toBundleName将区域设置转换为“文件名”以及可以在getCandidateLocales中控制的区域设置列表。 比如像 final
Java.util.PropertyResourceBundle
并调用setParent
ResourceBundle.Control()控制ResourceBundle的文件列表。您可以覆盖
获取CandidateLocales和toBundleName。toBundleName将区域设置转换为“文件名”以及可以在getCandidateLocales中控制的区域设置列表。
比如像
final String[] variants = new String[]{"your names"};
ResourceBundle.getBundle(baseName, locale,
new ResourceBundle.Control() {
public List<Locale> getCandidateLocales(String baseName, Locale locale) {
List<Locale> out = new ArrayList<Locale>();
String language = locale.getLanguage();
String country = locale.getCountry();
for (String variant : variants) {
out.add(new Locale(language, country, variant));
}
out.addAll(super.getCandidateLocales(baseName, locale));
return out;
}
public String toBundleName(String baseName, Locale locale) {
Locale l = new Locale(locale.getLanguage(), locale.getCountry());
return locale.getVariant() + "." + super.toBundleName(baseName, l);
}
});
final String[]variants=新字符串[]{“您的名字”};
getBundle(baseName、locale、,
新建ResourceBundle.Control(){
公共列表getCandidateLocales(字符串baseName、区域设置){
List out=new ArrayList();
String language=locale.getLanguage();
字符串country=locale.getCountry();
用于(字符串变量:变量){
添加(新的区域设置(语言、国家、变体));
}
out.addAll(super.getCandidateLocales(baseName,locale));
返回;
}
公共字符串toBundleName(字符串基名称、区域设置){
语言环境l=新语言环境(Locale.getLanguage(),Locale.getCountry());
返回locale.getVariant()+““+super.toBundleName(baseName,l);
}
});
它只在Java1.6中起作用。看看这个类。它非常适合我!JavadocforClass解释了如何使用它 (+子公司)
在这里您可以找到完整的a.k.a.代码文档。以下是我的实现:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
public class CombinedResourceBundle extends ResourceBundle
{
private Map<String, String> combinedResources = new HashMap<>();
private List<String> bundleNames;
private Locale locale;
private Control control;
public CombinedResourceBundle(List<String> bundleNames, Locale locale, Control control)
{
this.bundleNames = bundleNames;
this.locale = locale;
this.control = control;
}
public void load()
{
bundleNames.forEach(bundleName ->
{
ResourceBundle bundle = ResourceBundle.getBundle(bundleName, locale, control);
Enumeration<String> keysEnumeration = bundle.getKeys();
ArrayList<String> keysList = Collections.list(keysEnumeration);
keysList.forEach(key -> combinedResources.put(key, bundle.getString(key)));
});
}
@Override
public Object handleGetObject(String key)
{
return combinedResources.get(key);
}
@Override
public Enumeration<String> getKeys()
{
return Collections.enumeration(combinedResources.keySet());
}
}
import java.util.ArrayList;
导入java.util.Collections;
导入java.util.Enumeration;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Locale;
导入java.util.Map;
导入java.util.ResourceBundle;
公共类CombinedResourceBundle扩展了ResourceBundle
{
private Map combinedResources=新HashMap();
私有列表绑定;
私人场所;
私人控制;
公共组合资源绑定(列出绑定名、区域设置、控件)
{
this.bundleNames=bundleNames;
this.locale=locale;
这个控制=控制;
}
公共空荷载()
{
bundleName.forEach(bundleName->
{
ResourceBundle=ResourceBundle.getBundle(bundleName、locale、control);
枚举键枚举=bundle.getKeys();
ArrayList keysList=Collections.list(keysEnumeration);
forEach(key->combinedResources.put(key,bundle.getString(key));
});
}
@凌驾
公共对象handleGetObject(字符串键)
{
返回combinedResources.get(键);
}
@凌驾
公共枚举getKeys()
{
返回Collections.enumeration(combinedResources.keySet());
}
}
私有类ParentResourceHoleder扩展ResourceBundle{@Override public Enumeration getKeys(){//TODO自动生成的方法存根返回null;}@Override protected Object handleGetObject(String key){//TODO自动生成的方法存根返回null;}@Override protected void setParent(ResourceBundle parent){super.setParent(parent);}}java.util.MissingResourceException:找不到捆绑包java.util.PropertyResourceBundle的资源,key input.errorUm,扩展java.util.PropertyResourceBundle
。可能这是您想要的,但不知道您想要它