【问题标题】:Avoid .properties files GNU Gettext java避免使用 .properties 文件 GNU Gettext java
【发布时间】:2014-02-06 22:43:30
【问题描述】:

首先,我的问题与这两个类似:

JAVA gettext commons

error reading .po file in java

  • 我想使用 GNU Gettext 实用程序对我的应用程序进行国际化。我设法通过使用正确的键值对创建一个translations.properties 文件来使其工作,但即使我将语言环境明确设置为fr_CA 或Locale.CANADA_FRENCH,它也不会得到我的translations_fr_CA.properties。这是我的第一个问题。

  • 第二个也是最重要的问题:我无法摆脱 .properties 文件,因为我无法使用漂亮的 gettext complete msgid。我设法使用 msgfmt --java2 [...] 将我的 .po 文件编译为 .class,但如果没有 .properties 文件,ResourceBundle 将无法加载。

这是我当前测试项目的 zip:java_gettext_testing.zip

我在 zip 中包含了 gnu.gettext.GettextResource 以使其更简单。您可以使用javac test/*.java 编译并使用java test.test 运行

感谢您的帮助!

【问题讨论】:

    标签: java internationalization gnu gettext po


    【解决方案1】:

    我终于明白了。我不知道为什么,但如果不将它们放入包中,我就无法使用 .class 文件。我重新设计了我的结构,最后我可以用

    编译我的 .po 文件
    msgfmt --java2 -d . -r test.translations translations.po
    

    这会将 ./translations.po 文件编译为 test/translations.class 并为其提供适当的包信息。

    现在我可以做到了

    ResourceBundle myRes = ResourceBundle.getBundle("test.translations"); // load my test/translations.class file
    
    GettextResource.gettext(myRes, "message id to translate");
    

    仍然需要让语言环境正常工作,但现在对我来说是必不可少的。

    编辑 这个问题帮助我理解了 msgfmt 正在将 .po 文件编译成“真正的”java 对象 How to use ResourceBundle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多