Переводы ngettext, за что отвечают строки перевода

Впервые использовал ngettext для переводов и наткнулся на такой вывод в файле .po

#: app/admin.py:53 app/admin.py:127
msgid "task"
msgid_plural "tasks"
msgstr[0] "задача"
msgstr[1] "задача"
msgstr[2] "задача"
msgstr[3] "задача"

Кто подскажет, за что отвечает каждая из msgstr ?


Ответы (1 шт):

Автор решения: Za Ars

Почитав различные источники, выяснил, что числа в [] указывают на случай, когда число принимает то или иное значение. Указывается в начале файла в формате

"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
"%100>=11 && n%100<=14)? 2 : 3);\n"

А значит

  • 0 - n%10==1 && n%100!=11 - единичное число
  • 1 - n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) - числа заканчиваются на цифры от 2 до 4 вне диапазона 12-14
  • 2 - n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)- для 0 или от 5 до 9 или от 11 до 14
  • 3 - остальные варианты

т.е. для русского языка надо перевести как

#: app/admin.py:53 app/admin.py:127
msgid "task"
msgid_plural "tasks"
msgstr[0] "задача" # 1 зачача
msgstr[1] "задачи" # 2,3,4 задачи
msgstr[2] "задач"  # 5 задач
msgstr[3] "задач"  # хз сколько задач
→ Ссылка