拥有 Django 的 {% trans %} 标签
Own {% trans %} tag for Django
我为 Django 编写了一个模板标签,其用法类似于 {% foo bar="foobar"%}
。该标签采用 bar
参数值,在其上使用 ugettext
并使用翻译后的字符串呈现标签。
因此,基本上,标记的实现大致如下所示:
@register.simple_tag
def foo(bar):
return "something something " + ugettext(bar)
不幸的是,我们将 ugettext
与变量一起使用,这意味着 Django 不会标记我们的 bar
参数值进行翻译。
我在 Django makemessages
和 {% trans %}
代码中寻找解决方案,但没有找到任何可以清楚说明 "marking for translation" 是如何完成的。所以,我的问题是:怎么做?如何强制 Django 认为我的标签的 bar
参数值应该被翻译,所以它在执行 manage.py makemessages
?
后出现在 .po(t) 文件中
无需创建 "custom" trans 标记,可以使用 _()
语法传递字符串,因此参数会得到一个已翻译的字符串。
如果是问题中的标签 - 这意味着我们可以将标签实现更改为简单的:
@register.simple_tag
def foo(bar):
return "something something " + bar
但不必使用这样的东西:
{% trans "foobar" as var %}
{% foo bar=var %}
而是:
{% foo bar=_("foobar") %}
够方便,不浪费行和变量,标记字符串待翻译
我为 Django 编写了一个模板标签,其用法类似于 {% foo bar="foobar"%}
。该标签采用 bar
参数值,在其上使用 ugettext
并使用翻译后的字符串呈现标签。
因此,基本上,标记的实现大致如下所示:
@register.simple_tag
def foo(bar):
return "something something " + ugettext(bar)
不幸的是,我们将 ugettext
与变量一起使用,这意味着 Django 不会标记我们的 bar
参数值进行翻译。
我在 Django makemessages
和 {% trans %}
代码中寻找解决方案,但没有找到任何可以清楚说明 "marking for translation" 是如何完成的。所以,我的问题是:怎么做?如何强制 Django 认为我的标签的 bar
参数值应该被翻译,所以它在执行 manage.py makemessages
?
无需创建 "custom" trans 标记,可以使用 _()
语法传递字符串,因此参数会得到一个已翻译的字符串。
如果是问题中的标签 - 这意味着我们可以将标签实现更改为简单的:
@register.simple_tag
def foo(bar):
return "something something " + bar
但不必使用这样的东西:
{% trans "foobar" as var %}
{% foo bar=var %}
而是:
{% foo bar=_("foobar") %}
够方便,不浪费行和变量,标记字符串待翻译