如何在Django的i18n {% trans %} 标签中使用字符串替换?

1 投票
3 回答
950 浏览
提问于 2025-04-15 19:44

我在找类似这样的东西:

{% trans "花瓶里有 %{flowers} 朵花" < flowers:3 %}

当然,这里的语法是假的,但它应该能说明我想要的是什么。

我是不是应该自己动手做点什么?这看起来是个常见的需求,所以我很惊讶快速搜索没有找到任何有用的信息。

其实,我开始对Django的模板系统感到厌烦……虽然我明白它是为了把应用逻辑和视图分开,但这样做反而打扰了我的工作流程。我应该能快速做个原型,只有在需要和设计师合作的时候,才需要对这些东西严格一些。

3 个回答

0

你可能会觉得这个模块 inflect.py 很有用,虽然这意味着你需要离开当前的模板系统。

import inflect
p = inflect.engine()
p.num(numflowers, show=False)
return 'There %s %s %s in the vase.' % (
              p.pl('is'),
              p.numwords(numflowers),
              p.pl('flower'))

当 numflowers = 1 时

'There is one flower in the vase.'

当 numflowers = 2 时

'There are two flowers in the vase.'
1

使用 {% blocktrans %} 来代替 {% trans %}

3

我不太确定你想要做什么(< flowers:3 是想干嘛的?),不过你有没有看看 blocktrans 这个东西?

{% blocktrans count flowers|length as counter %}
    There is one flower in the vase.
{% plural %}
    There are {{ counter }} flowers in the vase.
{% endblocktrans %}

撰写回答