前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tornado with i18n

tornado with i18n

作者头像
pydata
发布2018-08-02 11:44:35
1K0
发布2018-08-02 11:44:35
举报
文章被收录于专栏:pydatapydata

i18n是国际化的简称(Internationalization,去掉开始的I和最后的N,中间一共18个字符)。 tornado中使用i18n需要下面两个工具 两个工具:pygettext,msgfmt,两个相关文件:po文件和mo文件

pygetext和msgfmt的使用方法:

编写python代码文件 test.py

代码语言:javascript
复制
from gettext import gettext as _
print _("well down")
print _("good")

pygetext test.py

生成messages.pot文件,更改文件后缀 mv messages.pot messages.po 配置msgstr值

生成一个名为messages.mo文件: msgfmt messages.po

建立目录locale/cn/LC_MESSAGES/

mv messages.po locale/cn/LC_MESSAGES

cn目录是所对应的语言,LC_MESSAGES是gettext.py文件里要求的 mo文件必须和所定义的域同名 gettext.py中有 modfile=os.path.join(localedir,lang,’LC_MESSAGES’,’%s.mo’ %domain)

测试: $python  »>gettext.install(‘messages’,’./locale’,unicode=True) 三个参数: 作用域名,用于限定翻译文件的主名 路径,存放翻译文件的路径 unicode,是否使用unicode(如果应用程序是unicode的,此处应设为True)

代码语言:javascript
复制
>>>gettext.translation('messages','./locale',languages=['cn']).install(True)
>>>print _("good")

在tornado中使用时:

代码语言:javascript
复制
$xgettext -L python -k=_ -o openquant.po $(find . -name \*.py) $(find template/ -name \*.html) 查找所有需要翻译的相关项生成 po 文件

$msgfmt openquant.po -o locale/zh_CN/LC_MESSAGES/openquant.mo 生成mo文件

完成相关文件的生成后,需要在代码中加载:

代码语言:javascript
复制
tornado.locale.load_gettext_translations(options.I18N_PATH,"openquant")

handler中自定义get_user_locale函数:

代码语言:javascript
复制
def get_user_locale(self):
    #zh_CN or en_US
    user_locale = self.get_cookie("user_locale")

    if user_locale:
        return tornado.locale.get(user_locale)

    return None

参考文章:

iMind

django多国语言

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年04月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档