拥有Django的{%trans%}标签

时间:2015-07-29 12:23:58

标签: python django templates internationalization gettext

我为Django编写了一个模板标签,就像使用{% foo bar="foobar"%}一样。标记采用bar参数值,在其上使用ugettext并使用已翻译的字符串呈现标记。

所以,基本上,标签的实现看起来或多或少是这样的:

@register.simple_tag
def foo(bar):
    return "something something " + ugettext(bar)

不幸的是,我们正在使用带有变量的ugettext,这意味着Django不会标记我们的bar参数的翻译值。

我一直在寻找Django makemessages以及{% trans %}代码的解决方案,但没有发现任何可以清楚地说出“标记翻译”事情的内容。所以,我的问题是:怎么做?如何强制Django认为我的标签的bar参数值应该被翻译,所以它在执行manage.py makemessages后出现在.po(t)文件中?

1 个答案:

答案 0 :(得分:0)

不是创建“自定义”反式标记,而是可以使用_()语法传递字符串,因此参数将获得已翻译的字符串。

如果标签有问题 - 这意味着我们可以将标签实现更改为简单:

@register.simple_tag
def foo(bar):
    return "something something " + bar

但是人们不必使用这样的东西:

{% trans "foobar" as var %}
{% foo bar=var %}

而是:

{% foo bar=_("foobar") %}

这很方便,不会浪费行和变量,并标记字符串进行翻译。

请参阅:https://docs.djangoproject.com/en/1.8/topics/i18n/translation/#string-literals-passed-to-tags-and-filters