模板中的翻譯

要在模板中啟用翻譯,你必須載入 i18n 庫。

{% load i18n %}

使用 trans 模板標籤進行基本翻譯。

{% 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")

你將必須使用 blocktrans 模板標記:

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

當然不是 JohnDoe,你可以有變數和過濾器:

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

如果 first_namelast_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:_("It works!") }}
{% firstof var1 var2 _("translatable fallback") %}

這是一個神奇的內建 django 模板系統來模仿函式呼叫語法,但這不是函式呼叫。_("It works!") 作為字串'_("It works!")'傳遞給 default 模板標籤,然後解析為可翻譯字串,就像 name 將被解析為變數而 name 將被解析為字串。