我正在使用wxWidgets重写我们的旧应用程序。该应用程序使用旧的自制语言词典机制,我想使用wxWidgets支持的标准gettext
方式替换它。
问题是应用程序不使用用户可读的字符串,而是使用所选语言字典翻译的符号标识符。换句话说,翻译应该总是发生。例如,代码说:
wxMenu * mnuParamSelect = new wxMenu();
mnuParamSelect->Append(wxID_mnuiParamSelect,
_("mnuiParamSelect"),
_("hlpParamSelect"));
这样,它使用默认符号语言,必须始终翻译(如符号mnuiParamSelect
为Select the parametres...
for English,{ {1}} Vyber parametry...
等。
考虑cs_CZ
,这似乎不常见。我对gettext
很新。我应该知道与符号语言标识方法有关的任何问题吗?
感谢您的时间和经验,
彼得
答案 0 :(得分:3)
据我所知,第一个大问题是创建新翻译会很困难(或者至少耗费时间),因为翻译人员只会看到符号ID,并且需要找到相应的英文消息。不同的文件。
第二个问题:如果你使用"%d文件"这样的printf样式格式,如果符号id不包含那些,则gettext(即msgfmt)不会为你做任何语法检查格式说明符。因此,如果您的翻译人员添加了一个"%d"例如,当与该翻译一起使用时,应用程序可能会崩溃。
答案 1 :(得分:0)
po 文件可以包含一个 msgctx
(消息上下文)字段,该字段构成 id 的一部分。
因此您可以将 msgctx
用作符号名称,将 msgid
用作默认区域设置文本,将 msgstr
用作翻译文本。