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 [source]¶
返回给定区域设置代码的最匹配项。
我们按顺序遍历所有给定的区域设置代码。如果我们对代码有严格匹配或宽松匹配(例如,“en” 匹配 “en_US”),我们返回区域设置。否则我们转到列表中的下一个代码。
默认情况下,如果找不到任何指定区域设置的翻译,我们返回
en_US
。你可以使用set_default_locale()
更改默认区域设置。
- tornado.locale.set_default_locale(code: str) None [source]¶
设置默认区域设置。
默认区域设置被认为是系统中所有字符串使用的语言。从磁盘加载的翻译是从默认区域设置到目标区域设置的映射。因此,你不需要为默认区域设置创建翻译文件。
- tornado.locale.load_translations(directory: str, encoding: Optional[str] = None) None [source]¶
从目录中的 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"
Changed in version 4.3: 添加了
encoding
参数。添加了对基于 BOM 的编码检测、UTF-16 和带有 BOM 的 UTF-8 的支持。
- tornado.locale.load_gettext_translations(directory: str, domain: str) None [source]¶
从
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)[source]¶
表示区域设置的对象。
在调用
load_translations
或load_gettext_translations
之一后,调用get
或get_closest
来获取 Locale 对象。- translate(message: str, plural_message: Optional[str] = None, count: Optional[int] = None) str [source]¶
返回该语言的给定消息的翻译。
如果提供了
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 [source]¶
格式化给定的日期。
默认情况下,我们返回一个相对时间(例如, “2 minutes ago”)。您可以通过
relative=False
来返回绝对日期字符串。您可以通过
full_format=True
强制使用完整格式日期(“July 10, 1980”)。此方法主要用于过去日期。对于未来日期,我们将回退到完整格式。
Changed in version 6.4: 现在支持
datetime.datetime
对象(仍然假设 naive datetime 对象为 UTC 时间)。
- class tornado.locale.CSVLocale(code: str, translations: Dict[str, Dict[str, str]])[source]¶
使用 tornado 的 CSV 翻译格式的 Locale 实现。
- class tornado.locale.GettextLocale(code: str, translations: NullTranslations)[source]¶
使用
gettext
模块实现的语言环境。- pgettext(context: str, message: str, plural_message: Optional[str] = None, count: Optional[int] = None) str [source]¶
允许为翻译设置上下文,接受复数形式。
使用方法示例
pgettext("law", "right") pgettext("good", "right")
复数消息示例
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
版本 4.2 中新增。