代码之家  ›  专栏  ›  技术社区  ›  INS

jar文件外的ResourceBundles

  •  1
  • INS  · 技术社区  · 16 年前

    当我需要分发使用netbeans6.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)
    

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

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

    有趣的是,如果我修改清单文件中的类路径,并将“.”路径添加到类路径,并且具有以下目录结构,我就不会有这个问题:

    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
    

    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)
    

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

    非常感谢。

    1 回复  |  直到 16 年前
        1
  •  1
  •   INS    16 年前

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