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