首先,我的问题与那两个类似:
error reading .po file in java
我想使用 GNU Gettext 实用程序来国际化我的应用程序。我设法通过使用正确的键值对创建
translations.properties
文件来让它工作,但它不会得到我的translations_fr_CA.properties
即使我明确地将语言环境设置为fr_CA 或 Locale.CANADA_FRENCH。这是我的第一期。第二个也是最重要的问题:我无法摆脱 .properties 文件,它是垃圾,因为我不能使用漂亮的 gettext complete msgid。我设法使用
msgfmt --java2 [...]
将我的 .po 文件编译为 .class,但是如果没有 .properties 文件,ResourceBundle
将无法加载。
这是我当前测试项目的压缩文件:java_gettext_testing.zip
我在 zip 中包含了 gnu.gettext.GettextResource 以使其更简单。您可以使用 javac test/*.java
进行编译并使用 java test.test
感谢您的帮助!
最佳答案
我终于明白了。我不知道为什么,但我不能在不将它们放入包中的情况下使用 .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
关于java - 避免 .properties 文件 GNU Gettext java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21188667/