资源包java

Vir*_*gam 4 java resourcebundle

是否可以将资源包维护在类似于以下内容的文件夹结构中;

 1. us\en
 2. ae\en
 3. ae\ar
Run Code Online (Sandbox Code Playgroud)

资源包文件名将相同,但在不同的文件夹中维护.我知道Java推荐

myresource_en_US.properties

但我需要在文件夹中维护它们并使用资源包类来访问.我正在使用JDK 6.有谁知道我怎么做?

Bal*_*usC 6

是的,您可以使用自定义控制加载Control.这是一个启动示例:

public class FolderControl extends Control {
    public ResourceBundle newBundle
        (String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
            throws IllegalAccessException, InstantiationException, IOException
    {
        String resourceName = "/" + locale.getCountry() + "/" + locale.getLanguage() 
            + "/" baseName + ".properties";
        ResourceBundle bundle = null;
        InputStream stream = null;
        if (reload) {
            URL url = loader.getResource(resourceName);
            if (url != null) {
                URLConnection connection = url.openConnection();
                if (connection != null) {
                    connection.setUseCaches(false);
                    stream = connection.getInputStream();
                }
            }
        } else {
            stream = loader.getResourceAsStream(resourceName);
        }
        if (stream != null) {
            try {
                bundle = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8"));
            } finally {
                stream.close();
            }
        }
        return bundle;
    }
}
Run Code Online (Sandbox Code Playgroud)

(源代码是从默认实现中复制而只resourceName更改,并且PropertyResourceBundle被更改为将流读取为UTF-8 - 不再需要native2ascii)

您使用如下

ResourceBundle bundle = ResourceBundle.getBundle("myresource", new FolderControl());
// ...
Run Code Online (Sandbox Code Playgroud)

也可以看看: