如何忽略系统默认的Locale来检索resourceBundle

cor*_*tin 6 java localization resourcebundle

我正在使用java.util.ResourceBundle类和属性文件本地化Web应用程序.

我有两个语言环境,fr_FR和en_US,我想使用en_US作为默认值,所以我写了以下文件:

  • messages_fr_FR.properties 使用fr_FR消息
  • messages.properties 使用en_US消息

我的问题是,ResourceBundle.getBundle(BUNDLE_NAME,语言环境)方法依傍Locale.getDefault()使用默认的属性文件,这意味着如果JVM区域设置为fr_FR,则之前 ResourceBundle.getBundle("name", new Locale("en", "US"))返回fr_FR时捆绑.

我可以重命名该messages.properties文件,但这可能会返回一个MissingResourceException以及其他所需和默认的语言环境.

如何在不复制属性文件或调用的情况下忽略系统区域设置Locale.setDefault

cor*_*tin 13

您可以通过使用自定义来实现ResourceBundle.Control,可以通过getFallbackLocale显式重载,也可以使用:

ResourceBundle.getBundle("name", new Locale("en", "US"), ResourceBundle.Control.getNoFallbackControl(ResourceBundle.Control.FORMAT_PROPERTIES))
Run Code Online (Sandbox Code Playgroud)