将 --extract-all
与 xgettext
一起使用不适用于复数。使用 I18n C++ hello world with plurals 的答案因为这里的 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
与 xgettext
一起使用可用于生成 POT 文件中的条目。
如何处理未直接传递给 gettext()
的字符串文字,例如源代码中的函数也包含直接传递给 gettext() 的复数字符串文字
类似函数来生成复数条目:msgid_plural
和 msgstr[]
?
最佳答案
我认为 xgettext 不支持这一点。如果您传递 --extract-all,它将忽略出现字符串的任何上下文。您可以考虑将此报告为错误。
无论如何,我建议明确标记所有字符串。有很好的工具支持可以相当快地完成这项工作。
关于c++ - 使用带有 --extract-all 的 xgettextt 处理复数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1114364/