Использование --extract-all
с xgettext
не работает с множественным числом. Используя ответ на 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
с xgettext
может использоваться для создания записей в POT-файле.
Как получить обработку строковых литералов, которые не передаются непосредственно в gettext()
-подобные функции в источнике, который также содержит множественные строковые литералы, которые передаются непосредственно в gettext()
-подобную функцию для создания множественных записей: * и msgstr[]
?