Django模板 {% trans %} 复数处理

13
根据 Django 文档中的 此部分,当需要翻译复数时应该使用 {% blocktrans %}。然而,对于像下面这样的例子,难道没有更方便的方法吗?
{% blocktrans count video.views.count as views %}
The video has been viewed <span>{{ views }}</span> time
{% plural %}
The video has been viewed <span>{{ views }}</span> times
{% endblocktrans %}

我尝试做以下事情:

{% blocktrans %}time{% plural %}times{% endblocktrans %}

但它抛出了TemplateSyntaxError:'blocktrans'不允许其他块标签(看到u'plural')在其中


5
这使得翻译变得非常困难,因为您强制规定单词顺序;如果翻译需要将复数形式放在“{{ views }}”之前呢?使用冗长的表达方式确实是正确的方法。 - Bouke
2个回答

19
你在blocktrans标签中忘记添加计数变量count variable as variable_name。该变量的值将用于检测其是否为复数。
{% blocktrans count variable as variable_name %}
    time
    {% plural %}
    {{ variable_name }} times
{% endblocktrans %}

啊,现在我明白了 :) 不过我仍然觉得应该有比这更方便的方法:{% trans "视频已被查看" %} <span>{{ video.views.count }}</span> {% blocktrans count video.views.count as views %}次{% plural %}次{% endblocktrans %} - jmagnusson
3
这是 Django 官方文档中关于国际化翻译的部分,其中介绍了如何使用模板标签 blocktrans 进行翻译。该标签可以让你在模板中指定需要翻译的文本,并且支持变量替换和复数形式翻译等功能。要使用该标签,需要先设置好 Django 的国际化配置,并且在代码中将需要翻译的文本用 gettext 函数包装起来。 - Gesias

-4

您可以使用:

{% blocktrans with video.views.count|pluralize as foo  and  video.views.count as views %}
The video has been viewed <span>{{ views }}</span> time{{ foo }}
{% endblocktrans %}

3
这样做就打败了使用blocktrans的目的。它只会制造更多的文字难题。最好选择{% plural %}解决方案。 - vdboor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接