如何在Java 9中配置ResourceBundle“无回退控制”

问题描述 投票:0回答:3

如何忽略系统默认区域设置来检索资源包中的回答,您可以在 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
相同的行为?

internationalization java-9 resourcebundle java-10
3个回答
0
投票

您需要实现

java.util.spi.ResourceBundleProvider
并将其注册为基本名称的服务。

如果没有可用资源,getBundle(String, Locale) 应该返回

null

问题是您需要为每个捆绑包基本名称注册其自己的提供者。


0
投票

您可以直接加载它:

Control.newBundle( baseName, locale, "java.properties", loader, false );

但是你需要实现自我缓存。


-1
投票

您使用的是UTF8,而不是

ISO-8859-1
吗?因为 Java 8 及之前版本将其用于
ResourceBundle
和属性文件。

参见:http://openjdk.java.net/jeps/226

© www.soinside.com 2019 - 2024. All rights reserved.