java - jar 文件外部的 ResourceBundles

标签 java jar gettext resourcebundle

当我需要分发使用 NetBeans 6.8 创建的 java 应用程序时,我遇到了问题。我有一些使用 gettext 作为类文件制作的翻译文件 - 使用 gettext 包中的 msgfmt 和以下脚本制作(shell 脚本在 msys 下运行 - 这里没有问题)

PO_FILES=`find . -iname "*_*.po"`
rm -f *.class

for PO_FILE in $PO_FILES; do
  CLASS_NAME=`echo $PO_FILE | sed "s/\.po$//" | sed "s/^.*\///"`
  echo "Compiling $PO_FILE to class $CLASS_NAME"
  msgfmt --java2 $PO_FILE -r $CLASS_NAME -d .
done

这是目录结构:

main.jar
lib/translate/Messages_fr$1.class
lib/translate/Messages_fr.class 
lib/*.jar (many needed libraries - they work)

list 文件具有以下类路径:

lib/xxx.jar ... lib/translate ... lib/yyy.jar (jar files are not the problem)

除了无法加载翻译文件外,应用程序运行没有任何问题。加载部分如下(客户想要法语翻译):

Locale.setDefault(Locale.FRANCE);
myResources = ResourceBundle.getBundle("Messages");

注意:仅当尝试使用 jar 文件运行时才会出现此问题(从 NetBeans 运行效果很好,从命令行运行编译的类也可以运行,但在运行 jar 文件 (java -jar main.jar) 时则不会。

有趣的是,如果我修改 list 文件中的类路径并添加“.”,就不会出现此问题。类路径的路径并具有以下目录结构:

main.jar
lib/translate/Messages_fr$1.class
lib/translate/Messages_fr.class 
lib/*.jar (many needed libraries - they work)
Messages_fr$1.class
Messages_fr.class

我正在使用具有以下 Java 版本的 Windows:

C:\>java -version
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)

D:\Program Files\Java\jdk1.6.0_17\bin>java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)

我感谢任何帮助,因为这变得令人沮丧。

谢谢,

尤利安

最佳答案

实际问题(如注释中所述)是 jar 文件的类路径中缺少/。例如,只有这样的路径:path/myPath 是不够的。我需要添加一个/( path/myPath/) 才能使其工作

关于java - jar 文件外部的 ResourceBundles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2409780/

相关文章:

php - 如何强制 gettext 独立于当前语言翻译特定语言?

java - [Android map API] : Google-play-services prompting update on phone but not in emulator.

javascript - 无法运行react-native-background-task。将代码插入 MainApplication.java 时出错

java - 如何打印不同类中方法的结果?

java - 从java中下载文件的下载百分比

java - 如何在linux中的类路径中添加多个jar文件

java - 双击 Jar 文件无法运行

java - Crontab 无法运行 jar 文件

C++:如何本地化已编写的程序

javascript - 如何使用poedit从js文件生成po文件