避免.properties文件GNU Gettext java

时间:2014-01-17 14:47:44

标签: java internationalization gnu gettext po

首先,我的问题类似于那两个:

JAVA gettext commons

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

运行

感谢您的帮助!

1 个答案:

答案 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