为了使我的代码国际化,我使用名为MessagesBundle_en_UK.properties的属性文件,该文件位于名为config的资源文件夹中,以便我具有以下结构:
+---src
\---com
\---proj
\---messages
Messages.java
+---config
\---languages
MessagesBundle_en_UK.properties
Messages.java有:
currentLocale = new Locale("en", "UK");
messages = ResourceBundle.getBundle("MessagesBundle", currentLocale);
我已经在类路径的开头添加了配置/语言,当我从命令行使用javac / java运行程序时它工作正常。
我的问题是,当我运行jar时它不起作用,我得到了这个MissingResourceException错误。
虽然清单确实包含配置/语言:
Class-Path:
./config/languages
./libs/xxxx.jar
./libs/...
...
我有点困惑......
感谢您的帮助 大卫
答案 0 :(得分:3)
您应该引用ResourceBundle相对于根的位置,就好像它是包的成员一样:
messages = ResourceBundle.getBundle("config.lagnuages.MessagesBundle",currentLocale);
答案 1 :(得分:0)
我认为这里的问题是您尝试将目录添加到清单Class-Path
,但不要以/
字符结束。来自Extension Mechanism documentation:
应用程序(或更一般地说,JAR文件)通过清单属性
Class-Path
指定所需的可选包(和库)的相对URL。如果无法在主机Java虚拟机*上安装可选包,则此属性会列出用于搜索可选包(或其他库)实现的URL。这些相对URL可以包括应用程序或可选包所需的任何库或资源的JAR文件和目录。 假设不以'/'结尾的相对网址引用JAR文件。例如,
Class-Path: servlet.jar infobus.jar acme/beans.jar images/
大多数人将他们的属性文件捆绑在他们的罐子里。例如:
+---jar_root
\---com
\---proj
\---messages
Messages.class
MessagesBundle_en_UK.properties
此捆绑包的名称为"com.proj.messages.MessageBundle"
。