Django模板翻译:零在fr中是复数

Django template translation: zero is plural in fr

我正在使用 Django,无论我在 blocktrans 标签中使用什么文本,都无法在我的模板中使用法语获得正确的复数形式。例如:

{% blocktrans count counter=0 %}
    foo
{% plural %}
    bars
{% endblocktrans %}

给我 bars 而不是 foo。事实上,0 在法语中是单数。

我在模板中检查了语言代码:

{% get_current_language as LANGUAGE_CODE %}
{{ LANGUAGE_CODE }}

它给了我 fr.

以下内容在我的 django.po 法语翻译文件的 header 中:

"Plural-Forms: nplurals=2; plural=(n > 1);\n"

大家有什么想法吗?

好吧,我终于找到了这里发生的事情。由于我输入 blocktrans 的方式,这里是我在 python manage.py makemessages -l fr 命令生成的 django.po 文件中得到的:

msgid ""
"\n"
"                                foo\n"
"                            "
msgid_plural ""
"\n"
"                                bars\n"
"                            "
msgstr[0] ""
msgstr[1] ""

我把类似的东西写成 msgstr[0]msgstr[1]:

msgstr[0] ""
"\n"
"                                foo\n"
"                            "
msgstr[1] ""
"\n"
"                                bars\n"
"                            "

所以我更新了模板:

{% blocktrans count counter=0 %}
    foo
{% plural %}
    bars
{% endblocktrans %}

收件人:

{% blocktrans count counter=0 %}foo{% plural %}bars{% endblocktrans %}

翻译如下:

msgid "foo"
msgid_plural "bars"
msgstr[0] "foo"
msgstr[1] "bars"

看起来如果您的 django.po 中有问题(翻译字符串丢失或为空),那么它会导致模板中的错误 0 解释。

我会留在那里...希望这有帮助!