Skip to main content

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)[源代码]

返回给定区域设置代码的最接近的匹配项。

我们按顺序遍历所有给定的区域设置代码。如果我们对代码进行紧凑或松散匹配(例如,对于“en_US”,“en”),则返回区域设置。否则,我们移动到列表中的下一个代码。

默认情况下,如果没有找到任何指定的语言环境的翻译,则返回 en_US。您可以使用 set_default_locale() 更改默认语言环境。

tornado.locale.set_default_locale(code)[源代码]

设置默认区域设置。

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

tornado.locale.load_translations(directory, encoding=None)[源代码]

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

翻译是包含可选的Python样式命名占位符(例如,My name is %(name)s)的字符串及其关联的翻译。

该目录应当具有 LOCALE.csv 形式的翻译文件,例如。 es_GT.csv。 CSV文件应包含两列或三列:string,translation和可选的复数指示符。多个指示符应当是“复数”或“单数”中的一个。给定的字符串可以具有单数和复数形式。例如,%(name)s liked this 可以具有不同的动词共轭,这取决于%(名称)是一个名称还是名称列表。在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和带有BOM的UTF-8的支持。

tornado.locale.load_gettext_translations(directory, domain)[源代码]

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. 编译:

    msgfmt mydomain.po -o {directory}/pt_BR/LC_MESSAGES/mydomain.mo
    
tornado.locale.get_supported_locales()[源代码]

返回所有支持的区域设置代码的列表。

class tornado.locale.Locale(code, translations)[源代码]

表示区域设置的对象。

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

classmethod get_closest(*locale_codes)[源代码]

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

classmethod get(code)[源代码]

返回给定区域设置代码的区域设置。

如果不支持,我们引发异常。

translate(message, plural_message=None, count=None)[源代码]

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

如果给予 plural_message,您还必须提供 count。当 count != 1 时,我们返回 plural_message,当 count == 1 时,我们返回给定消息的单数形式。

format_date(date, gmt_offset=0, relative=True, shorter=False, full_format=False)[源代码]

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

根据预设,我们会传回相对时间(例如「2分钟前」)。您可以使用 relative=False 返回绝对日期字符串。

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

此方法主要用于过去的日期。对于未来的日期,我们回到完整格式。

format_day(date, gmt_offset=0, dow=True)[源代码]

将给定日期格式设置为星期几。

示例:“1月22日,星期一”。您可以删除与 dow=False 的星期几。

list(parts)[源代码]

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

对于大小为1的列表,格式例如是“A,B和C”,“A和B”或只是“A”。

friendly_number(value)[源代码]

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

class tornado.locale.CSVLocale(code, translations)[源代码]

使用tornado的CSV翻译格式的区域设置实现。

class tornado.locale.GettextLocale(code, translations)[源代码]

使用 gettext 模块的区域设置实现。

pgettext(context, message, plural_message=None, count=None)[源代码]

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

用法示例:

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