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

时间:2014-10-17 10:09:59

标签: java localization resourcebundle

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

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

  • messages_fr_FR.properties使用fr_FR消息
  • 带有en_US消息的
  • messages.properties

我的问题是ResourceBundle.getBundle(BUNDLE_NAME, locale)方法在使用默认属性文件之前回退Locale.getDefault(),这意味着如果JVM Locale设置为fr_FR, ResourceBundle.getBundle("name", new Locale("en", "US"))返回fr_FR包。

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

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

2 个答案:

答案 0 :(得分:11)

您可以使用自定义ResourceBundle.Control来执行此操作,方法是明确重载getFallbackLocale,或使用:

ResourceBundle.getBundle("name", new Locale("en", "US"), ResourceBundle.Control.getNoFallbackControl(ResourceBundle.Control.FORMAT_PROPERTIES))

答案 1 :(得分:0)

您要查找的捆绑包称为baseBundle,可以获取 轻松使用Locale.ROOT作为语言环境。像这样:

ResourceBundle.getBundle("bundle name",Locale.ROOT)