6. 多语言支持(Internationalization)
作为一款web开发框架,国际化是必不可少的,虽然只做国内网站时没啥用。如果需要做一个多语言支持的网页,首先要准备多语言翻译文件,tornado支持两种格式的翻译文件:po/csv,csv更简洁些,下面以此为例来说明。
csv文件的格式为(三列):字符串,翻译,”plural”/“singular”,最后一列表明此翻译为单数时用还是复数时用,因此一个字符串可对应两个翻译串,也可为空。需要注意的是逗号后没有空格。csv格式(其中一行)举例如下:
"Translate this string","I donot know what you say"
将以上行保存到zh_CN.csv中,意思是如果语言选择为zn_CN,当碰见” Translate this string”(类似于索引)时,翻译(替换)为"Idonot know what you say"。
准备一个模板文件(template.html),内容如下:
<html><body><h1>{{_(“Translate this string”)}}</h1></body></html>
主程序文件如下:
class MainHandler(tornado.web.RequestHandler):
def get_user_locale(self):
#user_locale = self.get_argument('lang', None)
#可以通过某些方式来确定语言,这里直接取中文
return tornado.locale.get('zh_CN')
def get(self):
self.render("template.html")
def runweb():
webapp=tornado.web.Application([
(r"/", MainHandler),
])
lang_path = os.path.join(os.path.dirname(__file__), 'locales')
tornado.locale.load_translations(lang_path) #载入lang_path下的csv语言文件
webapp.listen(8000)
tornado.ioloop.IOLoop.current().start()
if __name__ == "__main__":
runweb()
应注意翻译文件的位置,此例中,主py文件和template.html在同一目录,并在这一目录下创建locales目录,而zh_CN.csv在locales下,如果还有其他语言,同样创建csv文件,例如zh_TW.csv,放置到locales下,同时根据用户的可接受的语言设置语言,即将get_user_locale的返回值设置为合适的语言即可。
五. 扩展
1. 日志
一个完备的应用系统应该包含日志,便于维护应用的运行。Tornado直接利用了python固有的日志系统(python的logging够强大了,似乎也无需再做什么)。Tornado在tornado.log中定义了三种日志:
tornado.access: 请求处理前日志
tornado.application: 应用处理请求时的日志
tornado.general:通用日志
在应用中只需import tornado.log,就可以写日志了,诸如
tornado.log.app_log.warn("I am here")
Tornado只扩展了日志的格式,其他的日志行为,参见python的logging模块。
在调用tornado.options.parse_command_line 或tornado.options.parse_config_file后,会缺省调用Tornado自己的日志格式设置,需要注意。