Python 如何在django.po中使用自定义复数形式?

Python 如何在django.po中使用自定义复数形式?,python,django,internationalization,gettext,Python,Django,Internationalization,Gettext,我想在django.po中使用俄语的自定义复数形式方案,但当我更改它时,它不会影响ungettext的结果 我发现,如果我使用同一个翻译文件而不使用Django,复数形式就可以正确使用 这是django.po文件 msgid "" msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-09-18 01:26+0000\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type

我想在django.po中使用俄语的自定义复数形式方案,但当我更改它时,它不会影响ungettext的结果

我发现,如果我使用同一个翻译文件而不使用Django,复数形式就可以正确使用

这是django.po文件

msgid ""
msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-09-18 01:26+0000\n"
"Language: ru\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 ? 0 : n%10==1 && n%100!=11 ? 1 : n"
"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 2 : 3)\n"

#: testapp/test.py:5
#, python-format
msgid "One new notification."
msgid_plural "%(count)s new notifications."
msgstr[0] "Одно новое оповещение."
msgstr[1] "%(count)s новое оповещение."
msgstr[2] "%(count)s новых оповещения."
msgstr[3] "%(count)s новых оповещений."
印行如下:

Одно новое оповещение.
2 новых оповещения.
5 новых оповещений.
51 новое оповещение.
这正是我所期望的ungettext的结果

但在django项目中使用相同的编译翻译文件(django.mo)时,输出是不同的

对于django.utils.translation.ungettext,它将更改为:

Одно новое оповещение.
2 новое оповещение.
5 новых оповещения.
Одно новое оповещение.

显然,这意味着在这种情况下,表格(msgstr)被正确读取,但复数形式被忽略(即使用俄语的常规格式,而不是我定义的格式)。

所有目录都合并到Django中,因此问题中描述的任务目前无法完成

最干净的解决方案可能是直接使用gettext

另请参阅

Одно новое оповещение.
2 новое оповещение.
5 новых оповещения.
Одно новое оповещение.