假设你有一个名为
的包
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 方法的参数以在您的类路径中查找资源。对我来说,默认的语言环境是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