次のようなフォルダ構造でリソースバンドルを維持することは可能ですか?
1. us\en
2. ae\en
3. ae\ar
リソースバンドルファイル名は同じですが、異なるフォルダに保持されます。私はJavaが推奨することを知っています
myresource_en_US.properties
ただし、それらをフォルダーに保持し、リソースバンドルクラスを使用してアクセスする必要があります。JDK 6を使用しています。どうすればよいか知っている人はいますか?
次のようなフォルダ構造でリソースバンドルを維持することは可能ですか?
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
、ストリームを 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()
「ローカライズされたリソースの編成とパッケージ化にさまざまな規則を提供する」方法として、引数として 1 つを渡すことができます。