簡體   English   中英

資源包 java

[英]resource bundle java

是否可以在類似於以下的文件夾結構中維護資源包;

 1. us\en
 2. ae\en
 3. ae\ar

資源包文件名相同,但保存在不同的文件夾中。 我知道 Java 推薦

myresource_en_US.properties

但是我需要在文件夾中維護它們並使用資源包類來訪問。 我正在使用 JDK 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;
    }
}

(源代碼是從默認實現中復制的,僅更改了resourceName並且更改了PropertyResourceBundle以將 stream 讀取為 UTF-8 --不再需要 native2ascii)

您使用如下

ResourceBundle bundle = ResourceBundle.getBundle("myresource", new FolderControl());
// ...

也可以看看:

看看http://download.oracle.com/javase/6/docs/api/java/util/ResourceBundle.Control.html . 您可以將一個作為參數傳遞給ResourceBundle.getBundle()作為“在本地化資源的組織和打包中提供不同約定”的一種方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM