tornado.locale — Internationalization support

用于生成本地化字符串的翻译方法.

加载语言环境并生成翻译后的字符串:

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) → tornado.locale.Locale[source]

返回给定语言环境代码的最接近匹配项.

我们按顺序遍历所有给定的语言环境代码. 如果我们的代码紧密匹配或松散(例如," en"表示" en_US"),则返回语言环境. 否则,我们将移至列表中的下一个代码.

By default we return en_US if no translations are found for any of the specified locales. You can change the default locale with set_default_locale().

tornado.locale.set_default_locale(code: str) → None[source]

设置默认语言环境.

假定默认语言环境是系统中所有字符串使用的语言. 从磁盘加载的转换是从默认语言环境到目标语言环境的映射. 因此,您无需为默认语言环境创建翻译文件.

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

从目录中的CSV文件加载翻译.

翻译是带有可选的Python样式命名占位符(例如, My name is %(name)s )及其相关翻译的字符串.

该目录应具有LOCALE.csv格式的翻译文件,例如es_GT.csv . CSV文件应具有两列或三列:字符串,翻译和可选的复数指示符. 复数指标应为"复数"或"单数"之一. 给定的字符串可以具有单数和复数形式. 比如%(name)s liked this可能取决于%(名)是否符合S有不同的动词变位是一个名称或名称的列表. 该字符串在CSV文件中应有两行,其中一行带有多个指示符"单数",另一行带有"复数". 对于没有动词的字符串,这些动词在翻译时会发生变化,只需使用"未知"或空字符串(或根本不包括该列).

在默认的" 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和UTF-8-with-BOM的支持.

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

gettext的语言环境树加载翻译

语言环境树类似于系统的/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. 与现有的POT文件合并:

    msgmerge old.po mydomain.po > new.po
    
  3. Compile:

    msgfmt mydomain.po -o {directory}/pt_BR/LC_MESSAGES/mydomain.mo
    
tornado.locale.get_supported_locales() → Iterable[str][source]

返回所有支持的语言环境代码的列表.

class tornado.locale.Locale(code: str)[source]

表示语言环境的对象.

调用load_translationsload_gettext_translations之一后,调用getget_closest以获取Locale对象.

classmethod get_closest(*locale_codes) → tornado.locale.Locale[source]

返回与给定语言环境代码最接近的匹配项.

classmethod get(code: str) → tornado.locale.Locale[source]

返回给定语言环境代码的语言环境.

如果不支持,则会引发异常.

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

返回此语言环境给定消息的翻译.

如果给出了plural_message ,则还必须提供count . 当count != 1 ,我们返回plural_message ;当count == 1时,我们返回给定消息的单数形式.

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

格式化给定日期(应为GMT).

默认情况下,我们返回一个相对时间(例如," 2分钟前"). 您可以使用relative=False返回绝对日期字符串.

您可以使用full_format=True强制使用完整格式的日期(" 1980年7月10日").

此方法主要用于过去的日期. 对于将来的日期,我们将使用完整格式.

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

将给定日期格式化为星期几.

示例:" 1月22日,星期一". 您可以使用dow=False删除星期几.

list(parts: Any) → str[source]

返回给定零件列表的逗号分隔列表.

格式为例如" A,B和C"," A和B",或者对于大小为1的列表仅为" A".

friendly_number(value: int) → str[source]

返回给定整数的逗号分隔数字.

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

使用龙卷风的CSV转换格式进行区域设置.

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

使用gettext模块的语言环境实现.

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

允许设置翻译上下文,接受复数形式.

Usage example:

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版中的新功能.