【问题标题】:[i18n]Load Resource Bundle out of classpath[i18n]从类路径中加载资源包
【发布时间】:2016-08-07 16:21:45
【问题描述】:

我正在尝试从我的项目的类路径以外的某个文件夹加载.properties 文件,以便为我的ResourceBundle 加载以进行国际化。我有这样的结构:

MyProject
    |
     - src
       |
        -com
         |
          -company
             |
              -UI
              -launcher
              -resources
                   |
                    -i18n.properties
                    -i18n_en_US.properties
                    -i18n_es_ES.properties
                    -i18n_zh_CN.properties

显然,这比将所有i18n 文件放在与src 文件夹相同的级别下更清楚。那么,我该如何加载它们呢?更准确地说,在加载我的资源包的行中,我应该如何放置 baseName 部分?

bundle = ResourceBundle.getBundle(baseName,localeInSettings);

我看过周围的答案,但不是很清楚。当我发现一些东西时,我会与大家分享并使其更清楚。

【问题讨论】:

  • 重点是:“src”位置无关紧要。问题是:在构建部署的东西时,你在哪里复制它?
  • 你的意思是如果我将所有的类打包到一个jar中,由于jar文件内部结构的变化,位置会发生变化?所以我想默认情况下它不应该改变,不是吗?必须避免它..

标签: java internationalization resourcebundle


【解决方案1】:

它仍在类路径中。只是不在默认包中。所以基本名称应该是

com.company.resources.i18n

【讨论】:

    【解决方案2】:

    实验证明,这两种形式都有效:

    com/WindThunderStudio/resources/i18n
    

    还有,

    com.WindThunderStudio.resources.i18n
    

    首先,它与加载普通属性文件不同,您不会在完整路径之前用“/”记录绝对路径。

    其次,第一种形式按我们的预期工作,因为 baseName 需要“全限定名”,即带有“.”的路径。作为第二种形式,我们可以引用ResourceBundle的JavaDoc页面:

    注意:baseName 参数应该是完全限定的类名。但是,为了与早期版本兼容,Sun 的 Java SE 运行时环境不验证这一点,因此可以通过指定路径名(使用“/”)而不是完全限定的类名(使用“.”)来访问 PropertyResourceBundles .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-27
      • 2011-04-22
      • 2010-10-26
      • 2020-09-02
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 2018-09-23
      相关资源
      最近更新 更多