我为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)文件中?
答案 0 :(得分:0)
不是创建“自定义”反式标记,而是可以使用_()
语法传递字符串,因此参数将获得已翻译的字符串。
如果标签有问题 - 这意味着我们可以将标签实现更改为简单:
@register.simple_tag
def foo(bar):
return "something something " + bar
但是人们不必使用这样的东西:
{% trans "foobar" as var %}
{% foo bar=var %}
而是:
{% foo bar=_("foobar") %}
这很方便,不会浪费行和变量,并标记字符串进行翻译。