gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:11:12 25 4
gpt4 key购买 nike

我想在俄语的 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 项目中使用相同的编译翻译文件(django.mo)时,输出会有所不同。

使用 django.utils.translation.ungettext 它会更改为:

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

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

最佳答案

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

也许,最简洁的解决方案是直接使用 gettext。

另请参阅this ticket .

关于python - 如何在 django.po 中使用自定义复数形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25903025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com