gettext中的一点缺憾

在python中做国际化编程,自然是首选gettext了,不过在使用过程中遇到了不少问题。

1、程序中待翻译字符串只能是english字串,chinese字串无法翻译,如下面一段程序:

#!/usr/bin/env python
# -*- coding: gb2312 -*-
import gettext

en = gettext.translation('test', localedir='.', languages=['en'])
en.install()
print _("我爱你")

 

输出结果仍然是"我爱你",而不是我期望的"i love you",除非这样写:

 

 

#!/usr/bin/env python
# -*- coding: gb2312 -*-
import gettext

en = gettext.translation('test', localedir='.', languages=['en'])
en.install()
print _(u"我爱你")

 

这是很不方便的,我尝试了以下2中方法

 

1)在translation中指定codeset='gb2312'

 

2)在install函数中指定unicode=True

都无法解决问题。是什么原因导致的呢?单步跟踪发现,原来gettext是把原始字串和翻译字串以字典形式存入translation类的_catalog中的,下面是调试时的信息,从中可以知道两点,一是存储在字典中的字串都是unicode的,二是gettext直接以_()中的字串作为key在_catalog字典中查找。结果当时是由于类型不匹配而找不到,因此返回原字串。

 

知道了原因,当然就知道怎么做了。修改gettext345行成下面这样:

 

 

然后使用的时候就是在构造translation时指定codeset就可以了,再也不用显式传递unicode字串给_()函数,岂不是很方便?

#!/usr/bin/env python
# -*- coding: gb2312 -*-
import gettext

en = gettext.translation('test', localedir='.', languages=['en'], codeset='gb2312')
en.install()
print _("我爱你")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值