Tornado 提供了一种简单而灵活的方式来支持国际化(i18n),以便轻松地将你的应用程序本地化为不同的语言。Tornado 的国际化支持主要涉及到两个方面:消息提取和消息本地化。

1. 消息提取

消息提取是将代码中的字符串标记为需要翻译的步骤。在 Tornado 中,可以使用 tornado.locale 模块的 _ 函数来标记字符串。以下是一个简单的例子:
import tornado.locale
from tornado.web import RequestHandler

class MyHandler(RequestHandler):
    def get(self):
        # 使用 _() 标记需要翻译的字符串
        message = self.locale.translate("Hello, world!")
        self.write(message)

if __name__ == "__main__":
    tornado.locale.load_translations("locales")
    app = tornado.web.Application([(r'/', MyHandler)])
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

在上述例子中,self.locale.translate("Hello, world!") 中的字符串被标记为需要翻译的消息。tornado.locale.load_translations("locales") 用于加载翻译文件。

2. 消息本地化

消息本地化是将提取的消息翻译成不同的语言。在 Tornado 中,可以使用 tornado.locale 模块来设置当前的本地化信息。以下是一个简单的例子:
import tornado.locale
from tornado.web import RequestHandler

class MyHandler(RequestHandler):
    def get(self):
        # 设置当前的本地化信息
        self.locale = tornado.locale.get('fr_FR')
        message = self.locale.translate("Hello, world!")
        self.write(message)

if __name__ == "__main__":
    tornado.locale.load_translations("locales")
    app = tornado.web.Application([(r'/', MyHandler)])
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

在上述例子中,self.locale = tornado.locale.get('fr_FR') 设置当前的本地化信息为法语('fr_FR')。Tornado 将会在加载的翻译文件中查找对应的翻译消息。

3. 翻译文件

翻译文件是包含翻译消息的文件,其格式通常是 Gettext PO 文件(.po)。你可以使用工具如 gettext 或在线翻译平台生成这些文件。一个简单的 PO 文件可能如下所示:
msgid "Hello, world!"
msgstr "Bonjour le monde !"

这里,msgid 是原始消息,msgstr 是翻译后的消息。

要使用 Tornado 的国际化功能,你需要在应用程序中加载适当的翻译文件,并确保 RequestHandler 实例的 locale 属性正确设置。

请注意,Tornado 的国际化支持是相对基础的,如果需要更高级的功能,你可能需要考虑使用专门的国际化库,如 Babel 等。


转载请注明出处:http://www.pingtaimeng.com/article/detail/7428/Tornado