【问题标题】:ResourceBundles outside a jar filejar 文件外的 ResourceBundles
【发布时间】:2011-01-25 11:18:06
【问题描述】:

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

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)

清单文件具有以下类路径:

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) 时不会出现。

有趣的是,如果我修改清单文件中的类路径并添加“。”,我就没有这个问题。类路径的路径并具有此目录结构:

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)

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

谢谢,

尤利安

【问题讨论】:

  • 你不会相信...在清单文件中添加 / ("lib/translate/" 而不是 "lib/translate" ) 可以使这些东西正常工作...我该怎么做这个来自 ant xml 文件?

标签: java jar gettext resourcebundle


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-08-14
    • 2018-08-31
    • 1970-01-01
    • 2012-02-05
    • 2013-04-12
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    相关资源
    最近更新 更多