如何使用trans块在jinja2中标记要翻译的字符串

时间:2015-01-26 22:15:10

标签: django internationalization jinja2

我正在使用django和jinja2,并且在我的一个html页面中有这样的东西

<p><strong>Q. {{ _("What products will you accept?") }}</strong></p>

<p class="style3"><strong>A: </strong>{% trans myurl=request.url('start') %}A list of qualifying devices is available once you start your trade-in estimate. <a href= {{myurl}}>Click here</a> to learn what your old device is worth.</p>{% endtrans %}

当我运行django-admin.py makemessages时,“您会接受哪些产品?”是唯一被处理的字符串。我认为用{% trans %}块包装一个字符串也会标记该字符串或这是一个错误的陈述?

标记第二个字符串的最佳技巧是什么(由于request.url变量,它很棘手)

我已尝试{{ _("A list of qualifying devices is available once you start your trade-in estimate. <a href= {{ request.url('start') }}>Click here</a> to learn what your old device is worth.")|safe }},但该链接无效。

1 个答案:

答案 0 :(得分:1)

要翻译您需要使用the {% blocktrans %} template tag

的块
{% blocktrans with myurl=request.url('start') %}
A list of qualifying devices is available once you start your trade-in estimate. <a href= {{myurl}}>Click here</a> to learn what your old device is worth.</p>
{% endblocktrans %}

但是,我不确定你是否可以在模板中调用像那样的函数,就像你正在尝试一样。

考虑将myurl作为模板变量传递,然后使用较小的文本块。这增加了翻译的重用 - 特别是对于像“点击此处”这样的小公共块。

{% blocktrans %}
    "A list of qualifying devices is available once you start your trade-in estimate."
{% endblocktrans %}

<a href= {{myurl}}>{% trans "Click here" %}</a>
    {% trans "to learn what your old device is worth." %}

此外,在使用HTML和模板标记时,请尝试将它们正确嵌套。例如,在您的代码中,您将拥有:

<p>... {% blocktrans %}... </p>{% endblocktrans %}

而是尝试将它们嵌套起来:

<p>... {% blocktrans %}... {% endblocktrans %}</p>

这对于可以自动缩进和折叠内容并有助于提高可读性的IDE尤其有用。