【问题标题】:How to ignore the system default Locale to retrieve resourceBundle如何忽略系统默认语言环境来检索resourceBundle
【发布时间】:2014-12-12 21:38:36
【问题描述】:

我正在使用 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)方法在使用默认属性文件之前回退Locale.getDefault(),这意味着如果JVM Locale设置为fr_FR, ResourceBundle.getBundle("name", new Locale("en", "US")) 返回 fr_FR 包。

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

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

【问题讨论】:

    标签: java localization resourcebundle


    【解决方案1】:

    您可以通过使用自定义ResourceBundle.Control 来做到这一点,或者通过显式重载getFallbackLocale,或者使用:

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

    【讨论】:

      【解决方案2】:

      你要找的包叫baseBundle,可以得到 轻松使用 Locale.ROOT 作为语言环境。像这样:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-09
        • 1970-01-01
        • 2014-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多