您的位置:首页 > 编程语言 > Python开发

python(django) 国际化翻译详细总结

2017-03-27 16:56 796 查看
1.在没有使用Python的web项目的框架的时候,解决方法如下:

a)使用翻译模块

i.translate模块

默认一天限制1000词翻译一天,默认被翻译语言为英文,默认翻译成语言为简体中文。

安装:

pip install translate


使用:

from translate import Translator
translator= Translator(to_lang="zh")
tran = translator.translate("this is a pen")
print tran


运行结果:

这是一支笔

ii.Goslate 免费谷歌翻译模块

谷歌升级了在线翻译系统, 新加入的 ticket 机制能有效地防止类似 goslate 这样简单的爬虫系统的访问. 技术上来说, 更加复杂的爬虫仍有可能成功抓取翻译, 但这么做已经越过了红线. Goslate 作者不再继续更新去破解 Google 的 ticket 机制. 所以此模块提供的方法可能有报错.

安装:

pip install goslate


使用:

import goslate
gs = goslate.Goslate()
print gs.translate('this is a pen', 'zh')


运行结果:

这是一支笔

b)直接调用翻译接口

鉴于国内调用GOOGLE翻译的速度,建议使用国内翻译软件的翻译接口,一般官网有提供,如有道翻译,百度在线翻译接口。

c)Python 国际化

进入Python的安装目录中Tools\i18n目录



执行
pygettext.py


生成一个messages.pot



修改messages.pot中编码

CHARSET  gb2312
ENCODING  utf8


编辑messages.pot

添加需要国际化的内容,另存为*.po文件

我这里存成了lang.po



编译lang.po

执行
msgfmt.py lang.po


生成lang.mo



在项目中建立目录

\locale\cn\LC_MESSAGES

\locale\en\LC_MESSAGES

LC_MESSAGES这个是必须的

同时将刚刚的lang.po、lang.mo放入到zn\LC_MESSAGES\这个目录下。

也可以生成一个英文的对应文件放入到en\LC_MESSAGES\目录下



测试下效果,输出用_(str)代替str。成功输出中文

将zn换成en如果没有配置默认直接输出原内容,如Hello YY





2.使用django配置的国际化

因为windows系统的原因,执行
python manage.py makemessages -l zh_hans
就会报错CommandError: Can’t find msguniq. Make sure you have GNU gettext tools 0.15 or newer installed.

需要手动安装gettext,通过百度google基本的方法是下载两个包集中解压,但是该方法报丢失dll的错,无解,后来尝试了一个豆瓣上的方法,链接为:

https://www.douban.com/group/topic/9572943/

但是他提供的是win32的,由于其他方法无解,直接在64位系统上安装的此方法提供的三个包,下载地址为:https://ftp.gnu.org/gnu/gettext/https://ftp.gnu.org/gnu/libiconv/下载了3个包:

gettext-runtime-X.bin.woe32.zip

gettext-tools-X.bin.woe32.zip

libiconv-X.bin.woe32.zip

解压这3个zip文件到同一个文件夹:C:\Program Files\gettext-utils

然后添加到系统变量的PATH中: ;C:\Program Files\gettext-utils\bin

那3个文件全部选中后,直接解压,选择一个目录后解压即可。

命令窗口输入
xgettext --version
时不报错即为正常。

使用:

中间件添加在session之后
'django.middleware.locale.LocaleMiddleware'


context_processors添加’
django.template.context_processors.i18n'


LANGUAGE_CODE = 'zh-hans'
USE_I18N = True
USE_L10N = True
LANGUAGES = (
('en', ('English')),
('zh-hans', ('中文简体')),
('zh-hant', ('中文繁體')),
)


执行
python manage.py makemessages -l zh_hans
后生成对应的文件夹在locale下,在po文件中修改对应的键值对,修改字符集为utf8再执行
python manage.py compilemessages
编译成mo文件,调用时引入
from django.utils.translation import ugettext as _
from django.utils.translation import ungettext as _un
测试







但是!执行最后的编译命令时遇到中文总是报错,可能是32位和64位不兼容的原因,最后还是按照前一个Python的国际化拷贝到C:\Python27\Tools\i18n手动编译再拷贝到项目里才运行的,有待完善。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python django 国际化