Tornado 國(guó)際化支持

2022-03-09 10:13 更新

用于生成本地化字符串的翻譯方法。

要加載語言環(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)單地返回原始字符串。

tornado.locale.get(*locale_codes) → tornado.locale.Locale

返回給定語言環(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)境。

tornado.locale.set_default_locale(code: str) → None

設(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)建翻譯文件。

tornado.locale.load_translations(directory: str, encoding: Optional[str] = None) → None

從目錄中的 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 的支持。

tornado.locale.load_gettext_translations(directory: str, domain: str) → None

從 ?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

tornado.locale.get_supported_locales() → Iterable[str]

返回所有支持的語言環(huán)境代碼的列表。

class tornado.locale.Locale(code: str)

表示語言環(huán)境的對(duì)象。

在調(diào)用 ?load_translations或 ?load_gettext_translations之一后,調(diào)用 ?get或 ?get_closest以獲取 Locale 對(duì)象。

classmethodget_closest(*locale_codes) → tornado.locale.Locale

返回給定語言環(huán)境代碼的最接近匹配項(xiàng)。

classmethodget(code: str) → tornado.locale.Locale

返回給定語言環(huán)境代碼的語言環(huán)境。

如果不支持,我們會(huì)引發(fā)異常。

translate(message: str, plural_message: Optional[str] = None, count: Optional[int] = None) → str

返回此語言環(huán)境的給定消息的翻譯。
如果給出了?pural_message?,您還必須提供?count?。當(dāng) ?count != 1? 時(shí)返回?pural_message?,當(dāng) ?count == 1? 時(shí)返回給定消息的單數(shù)形式。

format_date(date: Union[int, float, datetime.datetime], gmt_offset: int = 0, relative: bool = True, shorter: bool = False, full_format: bool = False) → str

格式化給定的日期(應(yīng)該是 GMT)。

默認(rèn)情況下,我們返回一個(gè)相對(duì)時(shí)間(例如,“2 分鐘前”)。 您可以使用?relative=False返回絕對(duì)日期字符串。

您可以使用full_format=True強(qiáng)制使用完整格式的日期(“1980 年 7 月 10 日”)。

此方法主要用于過去的日期。 對(duì)于未來的日期,我們會(huì)退回到完整格式。

format_day(date: datetime.datetime, gmt_offset: int = 0, dow: bool = True) → bool

將給定日期格式化為星期幾。

示例:“1 月 22 日,星期一”。 您可以使用 ?dow=False? 刪除星期幾。

list(parts: Any) → str

返回給定部分列表的逗號(hào)分隔列表。

例如,對(duì)于大小為 1 的列表,格式是“A、B 和 C”、“A 和 B”或只是“A”。

friendly_number(value: int) → str

返回給定整數(shù)的逗號(hào)分隔數(shù)字。

class tornado.locale.CSVLocale(code: str, translations: Dict[str, Dict[str, str]])

使用 tornado 的 CSV 翻譯格式的語言環(huán)境實(shí)現(xiàn)。

class tornado.locale.GettextLocale(code: str, translations: gettext.NullTranslations)

使用 gettext 模塊的語言環(huán)境實(shí)現(xiàn)

pgettext(context: str, message: str, plural_message: Optional[str] = None, count: Optional[int] = None) → str

允許為翻譯設(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


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)