如如何忽略系统默认区域设置来检索资源包中的回答,您可以在 Java 8 或更早版本中配置为不回退到默认区域设置:
ResourceBundle.getBundle("MyResources",
new Locale("en", "US"),
ResourceBundle.Control.getNoFallbackControl(ResourceBundle.Control.FORMAT_PROPERTIES))
在 Java 9 中,ResourceBundle.Control 在命名模块中使用时会抛出
UnsupportedOperationException
:命名模块ResourceBundle.Control
不 支持。
如何实现/配置自定义“MyResourcesProvider[Impl]”以实现与提供的
ResourceBundle.Control.getNoFallbackControl
相同的行为?
您需要实现
java.util.spi.ResourceBundleProvider
并将其注册为基本名称的服务。
如果没有可用资源,getBundle(String, Locale) 应该返回
null
。
问题是您需要为每个捆绑包基本名称注册其自己的提供者。
您可以直接加载它:
Control.newBundle( baseName, locale, "java.properties", loader, false );
但是你需要实现自我缓存。
您使用的是UTF8,而不是
ISO-8859-1
吗?因为 Java 8 及之前版本将其用于 ResourceBundle
和属性文件。