使用Django的模版來配合字串翻譯工作

來源:互聯網
上載者:User
Django模板使用兩種模板標籤,且文法格式與Python代碼有些許不同。 為了使得模板訪問到標籤,需要將 {% load i18n %} 放在模板最前面。

這個{% trans %}模板標記翻譯一個常量字串 (括以單或雙引號) 或 可變內容:

{% trans "This is the title." %}{% trans myvar %}

如果有noop 選項,變數查詢還是有效但翻譯會跳過。 當空缺內容要求將來再翻譯時,這很有用。

{% trans "myvar" noop %}

在一個帶 {% trans %} 的字串中,混進一個模板變數是不可能的。如果你的譯文要求字串帶有變數(預留位置placeholders),請使用 {% blocktrans %} :

{% blocktrans %}This string will have {{ value }} inside.{% endblocktrans %}

使用模板過濾器來翻譯一個模板運算式,需要在翻譯的這段文本中將運算式綁定到一個本地變數中:

{% blocktrans with value|filter as myvar %}This will have {{ myvar }} inside.{% endblocktrans %}

如果需要在 blocktrans 標籤內綁定多個運算式,可以用 and 來分隔:

{% blocktrans with book|title as book_t and author|title as author_t %}This is {{ book_t }} by {{ author_t }}{% endblocktrans %}

為了表示單複數相關的內容,需要在 {% blocktrans %} 和 {% endblocktrans %} 之間使用 {% plural %} 標籤來指定單複數形式,例如:

{% blocktrans count list|length as counter %}There is only one {{ name }} object.{% plural %}There are {{ counter }} {{ name }} objects.{% endblocktrans %}

其內在機制是,所有的塊和內嵌翻譯調用相應的 gettext 或 ngettext 。

每一個RequestContext可以訪問三個指定翻譯變數:

  1. {{ LANGUAGES }} 是一系列元組組成的列表,每個元組的第一個元素是語言代碼,第二個元素是用該語言表示的語言名稱。
  2. 作為一二字串,LANGUAGE_CODE是目前使用者的優先語言。 例如: en-us。(請參見下面的Django如何發現語言偏好)
  3. LANGUAGE_BIDI就是當前地區的說明。 如果為真(True),它就是從右向左書寫的語言,例如: 希伯來語,阿拉伯語。 如果為假(False),它就是從左至右書寫的語言,如: 英語,法語,德語等。

如果你不用這個RequestContext擴充,你可以用3個標記到那些值:

{% get_current_language as LANGUAGE_CODE %}{% get_available_languages as LANGUAGES %}{% get_current_language_bidi as LANGUAGE_BIDI %}

這些標記亦要求一個 {% load i18n %} 。

翻譯的hook在任何接受常量字串的模板塊標籤內也是可以使用的。 此時,使用 _() 運算式來指定翻譯字串,例如:

{% some_special_tag _("Page not found") value|yesno:_("yes,no") %}

在這種情況下,標記和過濾器兩個都會看到已經翻譯的字串,所有它們並不需要提防翻譯操作。

備忘:

在這個例子中,翻譯結構將放過字串"yes,no",而不是單獨的字串"yes"和"no"。翻譯的字串將需要包括逗號以便過濾器解析代碼明白如何分割參數。 例如, 一個德語翻譯器可能會翻譯字串 "yes,no" 為 "ja,nein" (保持逗號原封不動)。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.