tornado.locale
— 國際化支援¶
產生本地化字串的翻譯方法。
載入語系並產生翻譯後的字串
user_locale = tornado.locale.get("es_LA")
print(user_locale.translate("Sign out"))
tornado.locale.get()
返回最接近的匹配語系,不一定是您請求的特定語系。您可以使用 translate()
的額外參數來支援複數形式,例如
people = [...]
message = user_locale.translate(
"%(list)s is online", "%(list)s are online", len(people))
print(message % {"list": user_locale.list(people)})
如果 len(people) == 1
,則選擇第一個字串,否則選擇第二個字串。
應用程式應呼叫 load_translations
(使用簡單的 CSV 格式) 或 load_gettext_translations
(使用 gettext
和相關工具支援的 .mo
格式)。如果沒有呼叫任何方法,Locale.translate
方法將僅返回原始字串。
- tornado.locale.get(*locale_codes: str) Locale [原始碼]¶
返回給定語系程式碼的最接近匹配項。
我們按順序迭代所有給定的語系程式碼。如果我們找到與程式碼的嚴格或寬鬆匹配項(例如,“en” 對應 “en_US”),則返回語系。否則,我們移動到列表中的下一個程式碼。
預設情況下,如果沒有找到任何指定語系的翻譯,則返回
en_US
。您可以使用set_default_locale()
更改預設語系。
- tornado.locale.set_default_locale(code: str) None [原始碼]¶
設定預設語系。
預設語系假設為系統中所有字串使用的語言。從磁碟載入的翻譯是從預設語系到目標語系的對應。因此,您不需要為預設語系建立翻譯檔案。
- tornado.locale.load_translations(directory: str, encoding: Optional[str] = None) None [原始碼]¶
從目錄中的 CSV 檔案載入翻譯。
翻譯是具有可選 Python 樣式命名佔位符(例如,
My name is %(name)s
)及其相關翻譯的字串。目錄應具有
LOCALE.csv
格式的翻譯檔案,例如es_GT.csv
。CSV 檔案應具有兩到三列:字串、翻譯和可選的複數指示器。複數指示器應為 “plural” 或 “singular” 之一。給定的字串可以同時具有單數和複數形式。例如,%(name)s liked this
可能會根據 %(name)s 是一個名稱還是一個名稱列表而有不同的動詞變位。對於該字串,CSV 檔案中應有兩行,一行帶有複數指示器 “singular”,另一行帶有 “plural”。對於翻譯後不會改變的動詞的字串,只需使用 “unknown” 或空字串(或完全不包含該列)。使用預設 “excel” 方言中的
csv
模組讀取該檔案。在此格式中,逗號後不應有空格。如果未給出
encoding
參數,則如果該檔案包含位元組順序標記 (BOM),則會自動檢測編碼(在 UTF-8 和 UTF-16 之間),如果不存在 BOM,則預設為 UTF-8。範例翻譯
es_LA.csv
"I love you","Te amo" "%(name)s liked this","A %(name)s les gustó esto","plural" "%(name)s liked this","A %(name)s le gustó esto","singular"
在 4.3 版本中變更:新增了
encoding
參數。新增了對基於 BOM 的編碼檢測、UTF-16 和帶有 BOM 的 UTF-8 的支援。
- tornado.locale.load_gettext_translations(directory: str, domain: str) None [原始碼]¶
從
gettext
的語系樹載入翻譯語系樹類似於系統的
/usr/share/locale
,例如{directory}/{lang}/LC_MESSAGES/{domain}.mo
需要三個步驟才能翻譯您的應用程式
產生 POT 翻譯檔案
xgettext --language=Python --keyword=_:1,2 -d mydomain file1.py file2.html etc
與現有的 POT 檔案合併
msgmerge old.po mydomain.po > new.po
編譯
msgfmt mydomain.po -o {directory}/pt_BR/LC_MESSAGES/mydomain.mo
- class tornado.locale.Locale(code: str)[原始碼]¶
表示語系的物件。
在呼叫
load_translations
或load_gettext_translations
其中一個函式後,呼叫get
或get_closest
來取得 Locale 物件。- translate(message: str, plural_message: Optional[str] = None, count: Optional[int] = None) str [原始碼]¶
傳回此語言環境中給定訊息的翻譯。
如果給定了
plural_message
,您也必須提供count
。當count != 1
時,我們會傳回plural_message
,當count == 1
時,我們會傳回給定訊息的單數形式。
- format_date(date: Union[int, float, datetime], gmt_offset: int = 0, relative: bool = True, shorter: bool = False, full_format: bool = False) str [原始碼]¶
格式化給定的日期。
預設情況下,我們會傳回相對時間(例如,「2 分鐘前」)。您可以使用
relative=False
傳回絕對日期字串。您可以使用
full_format=True
強制使用完整格式日期(「1980 年 7 月 10 日」)。此方法主要用於過去的日期。對於未來的日期,我們會回退到完整格式。
在 6.4 版變更: 現在支援感知
datetime.datetime
物件(仍假設無時區的 datetime 物件為 UTC)。
- class tornado.locale.CSVLocale(code: str, translations: Dict[str, Dict[str, str]])[原始碼]¶
使用 Tornado 的 CSV 翻譯格式的語言環境實作。
- class tornado.locale.GettextLocale(code: str, translations: NullTranslations)[原始碼]¶
使用
gettext
模組的本地化實作。- pgettext(context: str, message: str, plural_message: Optional[str] = None, count: Optional[int] = None) str [原始碼]¶
允許為翻譯設定上下文,接受複數形式。
使用範例
pgettext("law", "right") pgettext("good", "right")
複數訊息範例
pgettext("organization", "club", "clubs", len(clubs)) pgettext("stick", "club", "clubs", len(clubs))
要使用上下文產生 POT 檔案,請將以下選項新增至
load_gettext_translations
序列的第一步xgettext [basic options] --keyword=pgettext:1c,2 --keyword=pgettext:1c,2,3
4.2 版本新增。