5

次のようなフォルダ構造でリソースバンドルを維持することは可能ですか?

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

リソースバンドルファイル名は同じですが、異なるフォルダに保持されます。私はJavaが推奨することを知っています

myresource_en_US.properties

ただし、それらをフォルダーに保持し、リソースバンドルクラスを使用してアクセスする必要があります。JDK 6を使用しています。どうすればよいか知っている人はいますか?

4

2 に答える 2

7

はい、カスタムでロードを制御できます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、ストリームを UTF-8 として読み取るように変更されたものだけです。native2ascii はもう必要ありません)

次のように使用します

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

以下も参照してください。

于 2011-05-31T14:21:15.163 に答える
0

http://download.oracle.com/javase/6/docs/api/java/util/ResourceBundle.Control.htmlをご覧ください。ResourceBundle.getBundle()「ローカライズされたリソースの編成とパッケージ化にさまざまな規則を提供する」方法として、引数として 1 つを渡すことができます。

于 2011-05-31T14:23:41.763 に答える