という名前のパッケージがあるとします
com.yourgroup.bundles
という名前のファイルを含む
hello_en_US.properties
バンドルをロードするには、次のいずれかを指定する必要があります
ResourceBundle bundle = ResourceBundle.getBundle("com.yourgroup.bundles.hello");
ResourceBundle bundle = ResourceBundle.getBundle("com/yourgroup/bundles/hello");
基本的に、javadoc はgetBundle
、クラスパス上のリソースを見つけるためにメソッドに渡した引数をどのように変換するかを示しています。私の場合、デフォルトの Locale は ですen_US
。
com.yourgroup.bundles.hello
に変換します
com/yourgroup/bundles/hello_en_US.properties
その後、 を使用しClassLoader
てそのリソースを見つけることができます。
ResourceBundle
名前を正しくマッピングすると、返される実装は実際にはカスタム クラスである可能性があります。そのためのjavadocに従ってください。それ以外の場合は、単なるProperties
リソース バンドルです。
魔法が起こるResourceBundle#newBundle(...)
String bundleName = toBundleName(baseName, locale); // baseName being 'com.yourgroup.bundles.hello' in my example above
...
final String resourceName = toResourceName(bundleName, "properties");
そしてそれは単に
public final String toResourceName(String bundleName, String suffix) {
StringBuilder sb = new StringBuilder(bundleName.length() + 1 + suffix.length());
sb.append(bundleName.replace('.', '/')).append('.').append(suffix);
return sb.toString();
}
....
URL url = classLoader.getResource(resourceName);
...
bundle = new PropertyResourceBundle(stream); // stream comes from url