【问题标题】:Django template translation: zero is plural in frDjango模板翻译:fr中的零是复数
【发布时间】:2015-10-19 17:18:15
【问题描述】:

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

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

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

我在模板中使用以下内容检查了语言代码:

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

它给了我fr。

以下是我的django.po文件的标题中的法语翻译:

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

你们有什么想法吗?

【问题讨论】:

    标签: django translation


    【解决方案1】:

    好的,我终于找到了这里发生的事情。由于我输入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 解释错误。

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

    【讨论】:

    • 我还发现如果你不翻译你的blocktrans并用FR(或其他语言)测试,0(零)显示复数。翻译后,一切顺利:-)
    猜你喜欢
    • 2015-09-25
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    相关资源
    最近更新 更多