- 论坛徽章:
- 0
|
本帖最后由 cdhigh 于 2013-08-08 18:05 编辑
鄙人的KindleEar已经正常运行了一个多月了,为何一直没有实现I18N呢,说来话长,时间不充裕是其一,但是最重要的是因为jinja2的I18N官方推荐实现是要依赖babel和pytz/gaepytz,而我讨论太多的第三方库,本来就是,python都已经自带gettext库了,何必为了一点点的优点而要安装那么多第三方库。
为此,我也多次的搜索网络,一般来说jinja2的I18N实现方案有两种:
1.官方推荐的使用babel/pytz。
2.配合django的I18N模块。
两个方案我都不喜欢,但是除此之外,没有找到其他的解决方案,无奈,只好自己啃各种文档和不停试验,总算解决,原来如此简单,不知为何网络上没有出现?
写在这里也是为了让后人不要再头疼了。
(KindleEar 1.6版本实现了I18N支持)
1.2. jinja2创建Environment时声明使用扩展‘jinja2.ext.i18n’- jjenv = jinja2.Environment(loader=jinja2.FileSystemLoader('templates'),extensions=['jinja2.ext.i18n'])
复制代码 3. 安装翻译组件,这里写成一个函数,初始化时调用一次设置默认语言,切换语言时再调用即可,比如:set_lang('zh-cn')- def set_lang(lang):
- #'lang'表示语言文件名为lang.mo,'i18n'表示语言文件名放在‘i18n'目录下,比如:
- #中文翻译目录和文件:i18n\zh-cn\LC_MESSAGES\lang.mo
- gettext.install('lang', 'i18n', unicode=True)
- tr = gettext.translation('lang', 'i18n', languages=[lang])
- tr.install(True)
- jjenv.install_gettext_translations(tr)
复制代码 4. 到python安装目录Tools\i18n下直接执行pygettext.py,则会生成一个messages.pot文件,打开之,把里面的CHARSET和ENCODING都修改为utf-8,另存此pot文件为utf-8格式,然后改名为lang.po。
5. 执行命令 python msgfmt.py lang.po,生成lang.mo,拷贝到i18n/en/LC_MESSAGES/,则英文支持完成了
6. 如果你的程序不复杂,则直接编辑lang.po,在后面添加msgid "“/msgstr ""对即可,一行msgid,一行msgstr,不过还是建议执行命令:python pygettext.py yourfile.py,然后生成messages.pot,翻译此文件然后改名为lang.po,再执行:
python msgfmt.py lang.po生成翻译后的lang.mo,拷贝到i18n/zh-cn/LC_MESSAGES/,中文支持完成。
7.在源py文件中使用_()函数将要翻译的字符串都括起来,比如_("English")
8.在jinja2模板中的字符串翻译可以使用两种方式:
1> {{_("English")}}
2>{%trans%}English{%endtrans%}
|
|