将i18n文件放在没有WEB-INF文件夹的实用程序jar中的位置

时间:2014-02-05 14:56:54

标签: java internationalization

我正在创建一个水平模块,作为所有Verticle产品的知识库。我独立构建了我的代码库的jar,这是所有这些垂直产品所使用的。每个Vericle产品都可以部署在应用程序服务器上,并可以充当Web应用程序。

我的实用工具jar有一个API类。每当用户创建此类的对象时,都会接受语言环境作为构造函数的参数。我有几个异常消息需要本地化,因为这些异常显示在GUI上。根据语言环境,我加载了bundle来获取本地化的消息。

我无法理解我的i18n文件在我的jar中的位置,因为它没有WEB-INF而且只是一个实用工具罐。如何将这些i18n文件复制到WAR文件中?

1 个答案:

答案 0 :(得分:1)

要加载消息包,您可以致电:

ResourceBundle.getBundle(baseName, locale, loader);

如javadoc中所述:

... getBundle尝试查找属性资源文件。它通过替换所有“。”从候选包名称生成路径名。带有“/”的字符并附加字符串“.properties”。它尝试使用ClassLoader.getResource

查找具有此名称的“资源”

所以主要的是你的包对于类加载器是可见的。

您可以在项目中创建一个包,比如 resource ,并将您的包放在其中。假设您的包名称是 mycomponent.properties ,baseName应为: resource.mycomponent

此软件包的内容应该类似于i18n文件列表:

  • mycomponent.properties(这是未指定语言环境时的defualt包)
  • mycomponent_en.properties
  • mycomponent_it.properties
  • ...

此包在您的代码中分布在您的jar中。使用您组件的Web模块在您的WEB-INF \ lib(或应用程序服务器的共享文件夹中)中包含您的jar,以及您的i18n异常消息。