Как да използвам персонализирани Plural-Forms в django.po?

Искам да използвам персонализирана схема за множествено число в моя django.po за руски, но когато я променя, това не засяга резултатите от ungettext.

Разбрах, че ако използвам същия файл за превод без Django, Plural-Forms работи правилно.

Ето файла 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 новых оповещений."

Ако стартирам това

import gettext

filename = "testp/conf/locale/ru/LC_MESSAGES/django.mo"
trans = gettext.GNUTranslations(open( filename, "rb" ) )
trans.install()

def translated_message(notifications_count):
    return trans.ungettext(
        "One new notification.",
        "%(count)s new notifications.",
        notifications_count
    ) % {"count": notifications_count}

print translated_message(1)
print translated_message(2)
print translated_message(5)
print translated_message(51)

Отпечатано е следното:

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

И точно това очаквам да бъде резултатът от ungettext.

Но изходът е различен, когато същият компилиран файл за превод (django.mo) се използва в Django проект.

С django.utils.translation.ungettext се променя на това:

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

Това очевидно означава, че в този случай формите (msgstr) се четат правилно, но Plural-Forms се игнорира (т.е. обичайната схема за руски език се използва вместо това, което съм дефинирал).


person Arseny    schedule 18.09.2014    source източник


Отговори (1)


Всички каталози са обединени в Django, така че задачата, описана във въпроса, не може да бъде изпълнена в момента.

Вероятно най-чистото решение би било просто да използвате директно gettext.

Вижте и този билет.

person Arseny    schedule 19.09.2014