从底到上分别为:
1.web.RequestHandler中通过locale属性取得翻译词条的对象:调用tornado.locale.get(code)方法来取得。
2.调用tornado.locale.Locale.get_closest(code);
3.调用tornado.locale.Locale.get(code):Locale类中一个类属性_cache用来缓存已经获取的翻译对象,有则直接返回;无则从模块变量_translations.get(code..)获取翻译对象。这个模块变量其实是一个字典;其中的值由tornado.locale.get_gettext_translation()方法来装入。然后创建GettextLocale(code,翻译对象即GNUTranslation类实例),入缓存后返回。
4.tornado.locale.get_gettext_translation()方法通过调用gettext.translation()来获取一个翻译对象(通常为GNUTranslation类实例,它会加载mo文件并将其所有翻译词条存入类的实例变量中)。而在gettext模块中,也有一个模块变量_translations用以缓存已经加载mo文件内容的GNUTranslation类实例。gettext.translation()方法就是先从其中获取,没有的话,才进一步去创建并加载mo对象的GNUTranslation类实例。