Django 模板翻译

示例

要在模板中启用翻译,您必须加载i18n库。

{% load i18n %}

基本翻译是通过transtemplate标签进行的。

{% trans "Some translatable text" %}
{# equivalent to python `ugettext("Some translatable text")` #}

该trans模板标签支持上下文:

{% trans "May" context "month" %}
{# equivalent to python `pgettext("May", "month")` #}

在翻译字符串中包含占位符,如下所示:

_("My name is {first_name} {last_name}").format(first_name="John", last_name="Doe")

您将必须使用blocktranstemplate标签:

{% blocktrans with first_name="John" last_name="Doe" %}
  My name is {{ first_name }} {{ last_name }}
{% endblocktrans %}

当然可以代替"John"而"Doe"您可以拥有变量和过滤器:

{% blocktrans with first_name=user.first_name last_name=user.last_name|title %}
  My name is {{ first_name }} {{ last_name }}
{% endblocktrans %}

如果first_name和last_name已经在您的上下文中,您甚至可以忽略以下with子句:

{% blocktrans %}My name is {{ first_name }} {{ last_name }}{% endblocktrans %}

但是,只能使用“顶级”上下文变量。这将不起作用:

{% blocktrans %}
    My name is {{user.first_name}} {{user.last_name}}
{% endblocktrans %}

这主要是因为变量名称在翻译文件中用作占位符。

该blocktrans模板标签还接受多元化。

{% blocktrans count nb=users|length }}
    There is {{ nb }} user.
{% plural %}
    There are {{ nb }} users.
{% endblocktrans %}

最后,无论使用什么i18n库,都可以使用_("")语法将可翻译字符串传递给模板标签。

{{ site_name|default:_("有用!") }}
{% firstof var1 var2 _("translatable fallback") %}

这是一些神奇的内置django模板系统,用于模仿函数调用语法,但这不是函数调用。作为字符串_("有用!")传递到default模板标签,'_("有用!")'然后name将其解析为可翻译的字符串,就像解析为变量和"name"解析为字符串一样。