1

使用--extract-allwithxgettext不适用于复数。使用带有复数的 I18n C++ hello world的答案作为 C++ 代码,这里有两个使用xgettext.

cat >helloplurals.cxx <<EOF
// hellopurals.cxx
#include <libintl.h>
#include <locale.h>
#include <iostream>
int main (){
    setlocale(LC_ALL, "");
    bindtextdomain("helloplurals", ".");
    textdomain( "helloplurals");
    for (int ii=0; ii<5; ii++)
        printf(ngettext("Hello world with %d moon.\n", "Hello world with %d moons.\n", ii), ii);
EOF
xgettext --package-name helloplurals --package-version 1.1 --default-domain helloplurals --output helloplurals.pot helloplurals.cxx
xgettext --extract-all --package-name helloplurals --package-version 1.1 --default-domain helloplurals --output helloplurals-ea.pot helloplurals.cxx

没有--extract-all按预期工作的一个,包括对复数的处理:

#: helloplurals.cxx:10
#, c-format
msgid "Hello world with %d moon.\n"
msgid_plural "Hello world with %d moons.\n"
msgstr[0] ""
msgstr[1] ""

--extract-all添加到命令行时,生成的 POT 文件不会。相反,有单独的条目:

#: helloplurals.cxx:10
#, c-format
msgid "Hello world with %d moon.\n"
msgstr ""

#: helloplurals.cxx:10
#, c-format
msgid "Hello world with %d moons.\n"
msgstr ""

直接传递给gettext()类似函数的字符串文字可以正确处理复数消息,如第一个使用xgettext.

对于不直接传递给gettext()类似函数之一的字符串文字,可以使用--extract-allwith选项xgettext在 POT 文件中生成条目。

如何处理不直接传递给gettext()源中类似函数的字符串文字,其中还包含多个字符串文字,这些字符串文字直接传递给gettext()类似函数以产生复数条目:msgid_pluralmsgstr[]

4

1 回答 1

1

我不认为 xgettext 支持这一点。如果您通过 --extract-all,它将忽略任何出现字符串的上下文。您可以考虑将此报告为错误。

无论如何,我建议明确标记所有字符串。有很好的工具支持可以相当快地做到这一点。

于 2009-07-12T17:57:14.297 回答