我正在努力翻译我的桌面java应用程序(在Windows 10操作系统上),因此我使用http://code.google.com/p/gettext-commons中的gettext-common
我遵循了gettext-common提供的教程:https://code.google.com/archive/p/gettext-commons/wikis/Tutorial.wiki
按照我创建的所有步骤创建Messages_fr.class
,Messages_en.class
问题在于gettext-common他们有Messages_en.properties而不是.class,当我创建Messages_en.properties(手动)时,它可以工作!而我不能手动完成这将永远(我有超过700句)
JAVA代码:
static I18n i18n = I18nFactory.getI18n(ParserTest.class,
"resources.messages");
public static void main(String args[]) {
for (int i = 0; i < 2; i++) {
if (i == 0) {
print("First run");
} else {
print("Second run");
i18n.setLocale(Locale.FRANCE);
}
print("Current locale: " + i18n.getLocale());
print(i18n
.tr("This text is marked for translation and is translated"));
String mark = i18n
.marktr("This text is marked for translation but not translated");
print(mark);
print(i18n.tr(mark));
mark = i18n.tr("This is the {0}. text to be translated",
"chat (noun)");
print(mark);
mark = i18n.tr("This is the {0}. text to be translated",
"chat (verb)");
print(mark);
print(i18n.tr("chat (noun)"));
print(i18n.tr("chat (verb)"));
print("");
}
}
private static void print(String text) {
System.out.println(text);
}
我有一个问题:
问题1 :我的消息文件位于resources/Messages
目录下。它只包含2个文件:messages_en.class和messages_fr.class而不是messages_fr.properties和messages_en.properties。
如果我尝试运行上面的代码,我会收到警告:&#34; ResourceBundle [messages],这是因为没有.properties文件
答案 0 :(得分:1)
对于java ResourceBundle,存在两种不同的实现:
似乎gettext桥接器使用ListResourceBundle或其描述中自己的ResourceBundle实现。没关系。
如图所示msgfmt从gettext文件(.po)创建一个.class资源文件。
gettext流程以所有语言的模板开头,.pot,然后是每种语言的.po文件。
他们对使用maven的建议可能确实值得。
所有人都说,也许这只是使用Locale.FRENCH
我也看到了Properties~和ListResourceBundles之间的区别:有人可能会尝试"resources/messages"
或关注正确的情况(大写M)"resources.Messages"
答案 1 :(得分:1)
我决定使用PropertyResourceBundle,所以我按照所有步骤跳转msgfmt(我不打算创建.class
)所以我使用msgcat和--properties-output
选项来创建.properties而不是.class
称道:
msgcat --properties-output msgs/fr.po -o src/com/i18n/Messages_fr.properties
或创建shell脚本po2pr.sh(./po2pr.sh fr)
if [ -z "$1" ]; then
echo "Please specify which language_country suffix(es) you want"
exit 1
fi
for lang in $*
do
echo "Creating .properties template file for $lang"
msgcat --properties-output msgs/${lang}.po -o src/com/i18n/Messages_${lang}.properties
msgs/messages.pot
done
java代码:
public class I {
private static I18n getI18n() {
I18n getI18n = I18nFactory.getI18n(I.class, "i18n.Messages");
Locale Locale = new Locale("fr");
getI18n.setLocale(Locale);
return getI18n;
}
public static String tr(String str) {
return getI18n().tr(str);
}
public static String tr(String text, Object o1) {
return getI18n().tr(text, o1);
}
public static String tr(String text, Object o1, Object o2) {
return getI18n().tr(text, o1, o2);
}
public static String tr(String text, Object o1, Object o2, Object o3) {
return getI18n().tr(text, o1, o2, o3);
}
public static String tr(String text, Object o1, Object o2, Object o3,
Object o4) {
return getI18n().tr(text, o1, o2, o3, o4);
}
public static String tr(String text, Object[] objects) {
return getI18n().tr(text, objects);
}
}
注意:
1 - 您必须创建Messages_fr.properties
2-确保以色调级别src.com.i18n.Messages