避免使用.properties文件GNU Gettext Java

Joh*_*ide 4 java gnu gettext internationalization po

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

JAVA gettext公用

在Java中读取.po文件时出错

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

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

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

我将zip中包含gnu.gettext.GettextResource简化了。您可以编译javac test/*.java并运行java test.test

谢谢你的帮助!

Joh*_*ide 5

我终于想通了。我不知道为什么,但是我不能使用.class文件而不将它们放在包中。我重新设计了结构,最后可以用

msgfmt --java2 -d . -r test.translations translations.po
Run Code Online (Sandbox Code Playgroud)

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

现在我可以做到这一点

ResourceBundle myRes = ResourceBundle.getBundle("test.translations"); // load my test/translations.class file

GettextResource.gettext(myRes, "message id to translate");
Run Code Online (Sandbox Code Playgroud)

仍然必须使语言环境正常工作,但现在对我来说至关重要。

编辑这个问题帮助我了解到msgfmt正在将.po文件编译为“真实” java对象。如何使用ResourceBundle