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