@yurchor відносно Цитата"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n""%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"по діфам на GTK сайті четверта форма з'явилась зі зміною на trans-uk@lists.fedoraproject.orgа звідки у федори з'явилась четверта форма?Єдиний варіант використання, що я знайшов, це пропуск чисел за рахунок викидання printf аргументів, приклад:Цитатаmsgid_plural "Files in the trash are permanently deleted after %d days"msgstr[0] "Файли у Смітнику буде остаточно вилучено за %d день"msgstr[3] "Файли у Смітнику буде остаточно вилучено за день"Але якщо брати взагалі (не тільки цей приклад), то невідповідність printf аргументів, то чревато крешами.Тому мабуть якась інша потреба була в цій 4й формі.
"Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n""%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
msgid_plural "Files in the trash are permanently deleted after %d days"msgstr[0] "Файли у Смітнику буде остаточно вилучено за %d день"msgstr[3] "Файли у Смітнику буде остаточно вилучено за день"
#include <stdio.h>int main() { printf("\n%s:\n", "Option1"); printf("за %d день чи за %d день\n", 1, 21); printf("за день чи за %d день\n", 1, 21); printf("\n%s:\n", "Option2"); printf("за %d день, за '%s' день\n", 1, "другий"); printf("за день, за '%s' день\n", 1, "другий"); return 0;}
% ./testOption1:за 1 день чи за 21 деньза день чи за 1 деньOption2:за 1 день, за 'другий' деньsegmentation fault (core dumped)%
update: як на мене, то можливість нехтування с-printf аргументом(-ами) мала б бути врахована в gettext чи навіть у самому софті.
% cat po/uk.pomsgid ""msgstr """Language: uk\n""MIME-Version: 1.0\n""Content-Type: text/plain; charset=UTF-8\n""Content-Transfer-Encoding: 8bit\n""Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : ""n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"#, c-formatmsgid "in %d day"msgid_plural "in %d days"msgstr[0] "за %d день"msgstr[1] "за %d дні"msgstr[2] "за %d днів"msgstr[3] "за день"
% cat test_n.c#include <stdio.h>#include <stdlib.h>#include <libintl.h>#include <locale.h>#define PACKAGE_NAME "test_n"int main(int argc, char **argv) { setlocale(LC_ALL, ""); bindtextdomain(PACKAGE_NAME, "/usr/local/share/locale"); textdomain(PACKAGE_NAME); // if (argc > 2) { int n1 = atoi(argv[1]); int n2 = atoi(argv[2]); char format[1024]; snprintf(format, sizeof(format), "%s, %s\n", ngettext("in %d day", "in %d days", n1), ngettext("in %d day", "in %d days", n2)); printf(format, n1, n2); } // return 0;}
because in many languages the translators want to replace the ‘%d’ with an explicitword in the singular case, just like “one” in English, and C format strings cannotconsume the second argument but skip the first argument. Instead, you have toreorder the arguments so that ‘n’ comes last:printf(ngettext("%2$d file removed from directory %1$s", "%2$d files removed from directory %1$s", n), dir, n);
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
Я перекладаю Gnu Savane. Там є множинна форма повідомлень. Я використовую Код: [Вибрати]"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n".Мені потрібно переходити на 4 чи 5 форм (жодного, один, *1, *[234], *)? Я навіть там де в оригіналі пише словами один, два, три, ставлю цифру, бо мені так подобається.
Друкарські помилки:запитажмо -> запитаємозареєстрованіупоточе -> поточнерозсики -> листування
Автор звіту написав, що у найновішій версії все виправили. Гаразд, будемо чекати на оновлення. Дякую за консультацію.
Preparing to move %'d filePreparing to move %'d filesCurrent Ukrainian[0]: Підготовлення до переміщення #x27;d файлуCurrent Ukrainian[1]: Підготовлення до переміщення #x27;d файлівCurrent Ukrainian[2]: Підготовлення до переміщення #x27;d файлів
... I was looking at https://discourse.gnome.org/t/nautilus-ukrainian-translation-is-broken-i-am-triaged-it-until-48-alpha-from-flatpak-and-it-is-working-there. Could a member of ... to fix the issue?