Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java多资源包_Java_Resourcebundle - Fatal编程技术网

Java多资源包

Java多资源包,java,resourcebundle,Java,Resourcebundle,我想将不同包中的多个属性文件作为ResourceBundle加载。我可以在Java中实现这一点吗扩展Java.util.PropertyResourceBundle并调用setParent ResourceBundle.Control()控制ResourceBundle的文件列表。您可以覆盖 获取CandidateLocales和toBundleName。toBundleName将区域设置转换为“文件名”以及可以在getCandidateLocales中控制的区域设置列表。 比如像 final

我想将不同包中的多个属性文件作为ResourceBundle加载。我可以在Java中实现这一点吗

扩展
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
。可能这是您想要的,但不知道您想要它