使用Django的模版來配合字符串翻譯工作
Django模板使用兩種模板標簽,且語法格式與Python代碼有些許不同。 為了使得模板訪問到標簽,需要將 {% load i18n %} 放在模板最前面。
這個{% trans %}模板標記翻譯一個常量字符串 (括以單或雙引號) 或 可變內(nèi)容:
<title>{% trans "This is the title." %}</title> <title>{% trans myvar %}</title>
如果有noop 選項,變量查詢還是有效但翻譯會跳過。 當空缺內(nèi)容要求將來再翻譯時,這很有用。
<title>{% trans "myvar" noop %}</title>
在一個帶 {% trans %} 的字符串中,混進一個模板變量是不可能的。如果你的譯文要求字符串帶有變量(占位符placeholders),請使用 {% blocktrans %} :
{% blocktrans %}This string will have {{ value }} inside.{% endblocktrans %}
使用模板過濾器來翻譯一個模板表達式,需要在翻譯的這段文本中將表達式綁定到一個本地變量中:
{% blocktrans with value|filter as myvar %} This will have {{ myvar }} inside. {% endblocktrans %}
如果需要在 blocktrans 標簽內(nèi)綁定多個表達式,可以用 and 來分隔:
{% blocktrans with book|title as book_t and author|title as author_t %} This is {{ book_t }} by {{ author_t }} {% endblocktrans %}
為了表示單復(fù)數(shù)相關(guān)的內(nèi)容,需要在 {% blocktrans %} 和 {% endblocktrans %} 之間使用 {% plural %} 標簽來指定單復(fù)數(shù)形式,例如:
{% blocktrans count list|length as counter %} There is only one {{ name }} object. {% plural %} There are {{ counter }} {{ name }} objects. {% endblocktrans %}
其內(nèi)在機制是,所有的塊和內(nèi)嵌翻譯調(diào)用相應(yīng)的 gettext 或 ngettext 。
每一個RequestContext可以訪問三個指定翻譯變量:
- {{ LANGUAGES }} 是一系列元組組成的列表,每個元組的第一個元素是語言代碼,第二個元素是用該語言表示的語言名稱。
- 作為一二字符串,LANGUAGE_CODE是當前用戶的優(yōu)先語言。 例如: en-us。(請參見下面的Django如何發(fā)現(xiàn)語言偏好)
- 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在任何接受常量字符串的模板塊標簽內(nèi)也是可以使用的。 此時,使用 _() 表達式來指定翻譯字符串,例如:
{% some_special_tag _("Page not found") value|yesno:_("yes,no") %}
在這種情況下,標記和過濾器兩個都會看到已經(jīng)翻譯的字符串,所有它們并不需要提防翻譯操作。
備注:
在這個例子中,翻譯結(jié)構(gòu)將放過字符串"yes,no",而不是單獨的字符串"yes"和"no"。翻譯的字符串將需要包括逗號以便過濾器解析代碼明白如何分割參數(shù)。 例如, 一個德語翻譯器可能會翻譯字符串 "yes,no" 為 "ja,nein" (保持逗號原封不動)。
相關(guān)文章
如何在windows下安裝Pycham2020軟件(方法步驟詳解)
這篇文章主要介紹了在windows下安裝Pycham2020軟件方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05Python3將jpg轉(zhuǎn)為pdf文件的方法示例
這篇文章主要介紹了Python3將jpg轉(zhuǎn)為pdf文件的方法,結(jié)合完整實例形式分析了Python3針對jpg轉(zhuǎn)pdf格式的文件讀寫、編碼裝換等相關(guān)操作技巧,需要的朋友可以參考下2019-12-12python網(wǎng)絡(luò)編程之多線程同時接受和發(fā)送
這篇文章主要為大家詳細介紹了python網(wǎng)絡(luò)編程之多線程同時接受和發(fā)送,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-09-09