使用--extract-all
withxgettext
不适用于复数。使用带有复数的 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-all
with选项xgettext
在 POT 文件中生成条目。
如何处理不直接传递给gettext()
源中类似函数的字符串文字,其中还包含多个字符串文字,这些字符串文字直接传递给gettext()
类似函数以产生复数条目:msgid_plural
和msgstr[]
?