用于生成本地化字符串的翻譯方法。
要加載語言環(huán)境并生成翻譯的字符串:
user_locale = tornado.locale.get("es_LA")
print(user_locale.translate("Sign out"))
?tornado.locale.get()
? 返回最匹配的語言環(huán)境,不一定是您請求的特定語言環(huán)境。 您可以使用 ?translate()
? 的附加參數(shù)來支持復數(shù),例如:
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
? 方法將簡單地返回原始字符串。
返回給定語言環(huán)境代碼的最接近匹配項。
我們按順序遍歷所有給定的語言環(huán)境代碼。 如果我們對代碼有緊密或松散的匹配(例如,“en”對應“en_US”),我們會返回語言環(huán)境。 否則,我們將移至列表中的下一個代碼。
默認情況下,如果沒有找到任何指定語言環(huán)境的翻譯,我們將返回 ?en_US
?。 您可以使用 ?set_default_locale()
? 更改默認語言環(huán)境。
設置默認語言環(huán)境。
假定默認語言環(huán)境是系統(tǒng)中所有字符串使用的語言。 從磁盤加載的翻譯是從默認語言環(huán)境到目標語言環(huán)境的映射。 因此,您無需為默認語言環(huán)境創(chuàng)建翻譯文件。
從目錄中的 CSV 文件加載翻譯。
翻譯是帶有可選 Python 風格命名占位符的字符串(例如,?my name is %(name)s
?)及其相關的翻譯。
該目錄應具有 ?LOCALE.csv
? 格式的翻譯文件,例如 ?es_GT.csv
?。 CSV 文件應該有兩列或三列:字符串、翻譯和可選的復數(shù)指示符。 復數(shù)指示符應為“復數(shù)”或“單數(shù)”之一。 給定的字符串可以有單數(shù)和復數(shù)形式。 例如 ?%(name)s like this
? 可能有不同的動詞變位,這取決于 %(name)s 是一個名字還是一個名字列表。 該字符串在 CSV 文件中應該有兩行,一行帶有復數(shù)指示符“singular”,另一行帶有“plural”。 對于沒有在翻譯時會改變的動詞的字符串,只需使用“未知”或空字符串(或根本不包括該列)。
使用默認“excel”語言中的 csv 模塊讀取文件。 在這種格式中,逗號后不應有空格。
如果未給出編碼參數(shù),則如果文件包含字節(jié)順序標記 (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 版更改: 添加了編碼參數(shù)。 添加了對基于 BOM 的編碼檢測、UTF-16 和 UTF-8-with-BOM 的支持。
從 ?gettext
的語言環(huán)境樹加載翻譯
語言環(huán)境樹類似于系統(tǒng)的 ?/usr/share/locale
,例如:
{directory}/{lang}/LC_MESSAGES/{domain}.mo
翻譯您的應用程序需要三個步驟:
1、生成 POT 翻譯文件:
xgettext --language=Python --keyword=_:1,2 -d mydomain file1.py file2.html etc
2、合并現(xiàn)有的 POT 文件:
msgmerge old.po mydomain.po > new.po
3、編譯:
msgfmt mydomain.po -o {directory}/pt_BR/LC_MESSAGES/mydomain.mo
返回所有支持的語言環(huán)境代碼的列表。
表示語言環(huán)境的對象。
在調用 ?load_translations
或 ?load_gettext_translations
之一后,調用 ?get
或 ?get_closest
以獲取 Locale 對象。
返回給定語言環(huán)境代碼的最接近匹配項。
返回給定語言環(huán)境代碼的語言環(huán)境。
如果不支持,我們會引發(fā)異常。
返回此語言環(huán)境的給定消息的翻譯。
如果給出了?pural_message
?,您還必須提供?count
?。當 ?count != 1
? 時返回?pural_message
?,當 ?count == 1
? 時返回給定消息的單數(shù)形式。
格式化給定的日期(應該是 GMT)。
默認情況下,我們返回一個相對時間(例如,“2 分鐘前”)。 您可以使用?relative=False
返回絕對日期字符串。
您可以使用full_format=True
強制使用完整格式的日期(“1980 年 7 月 10 日”)。
此方法主要用于過去的日期。 對于未來的日期,我們會退回到完整格式。
將給定日期格式化為星期幾。
示例:“1 月 22 日,星期一”。 您可以使用 ?dow=False
? 刪除星期幾。
返回給定部分列表的逗號分隔列表。
例如,對于大小為 1 的列表,格式是“A、B 和 C”、“A 和 B”或只是“A”。
返回給定整數(shù)的逗號分隔數(shù)字。
使用 tornado 的 CSV 翻譯格式的語言環(huán)境實現(xiàn)。
使用 gettext 模塊的語言環(huán)境實現(xiàn)
允許為翻譯設置上下文,接受復數(shù)形式。
使用示例:
pgettext("law", "right")
pgettext("good", "right")
復數(shù)消息示例:
pgettext("organization", "club", "clubs", len(clubs))
pgettext("stick", "club", "clubs", len(clubs))
要生成帶有上下文的 POT 文件,請將以下選項添加到 ?load_gettext_translations
序列的第 1 步:
xgettext [basic options] --keyword=pgettext:1c,2 --keyword=pgettext:1c,2,3
更多建議: