Обработка множественного числа с использованием xgettextt с --extract-all - PullRequest
1 голос
/ 11 июля 2009

Использование --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[]?

1 Ответ

1 голос
/ 12 июля 2009

Я не думаю, что xgettext поддерживает это. Если вы передадите --extract-all, он проигнорирует любой контекст, где встречается строка. Вы можете сообщить об этом как об ошибке.

В любом случае, я бы порекомендовал явно пометить все строки. Есть хорошая поддержка инструментов, чтобы сделать это довольно быстро.

...