python的中文支持

python的中文支持

我设法是程序显示中文,但执行后的信息为:
unable to translate from None to utf-8: argument 2 must be string, not None
Traceback (most recent call last):
  File "./language_tr.py", line 9, in ?
    print _("Hello World!\n")
  File "/usr/lib/python2.3/site-packages/rhpl/translate.py", line 200, in gettext
    return translation.encode("UTF-8")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in range(128)

何解?
程序代码很简单,如下
#!/usr/bin/python
##### coding : utf-8
from rhpl.translate import N_, _
from rhpl.translate import *

textdomain("LLLL")
print _("Hello World!\n")
print _("LLLL")

剩下的就是写个po文件生成mo文件  LLLL.mo

请哪位高手给指导一下!
好象是你的i18n框架的问题,可能是调用方法不能。没用过你这种。
你直接print中文不行吗?非要这样写
没办法,我的程序要支持多国语言,不这样写没办法呀
你的i18n框架没见过。最简单的就是使用标准的gettext框架。
转一篇相关文章,希望有用:

MPN006〓多语言界面囫囵吞枣教程

用到gettext模块。没有理由、没有原因,照着做就行了
1。假设你的程序是main.py。在程序中添加
def _(s):return s
_=gettext.translation('messages','.').gettext

2。你的程序中的所有需要翻译的字串都用函数_包起来:
_("Hello")

3。运行python C:\Python\Tools\i18n\pygettext.py main.py
产生messages.pot文件

4。编辑messages.pot文件,只能修改下面这样成对出现的,不想翻译的就别动它了
msgid "Hello world!"
msgstr ""
比如修改成
msgid "Hello world!"
msgstr "小平,你好"

5。运行python C:\Python\Tools\i18n\msgfmt.py messages
产生messages.mo文件,如果程序抱怨找不到messages.×××,就把
messages.pot改名为messages.po

6。在main.py所在目录下面建一个zh目录(中国),zh下面再建一个lc_messages
目录,把messages.mo拷贝到这里。Linux的大小写怎样规定的?我不知道

7。设置环境变量LANG,对于windows,可以写在autoexec.bat里面(98以前?)
set LANG=zh
这里的zh与前面的zh目录一致;
或者在系统变量里面添加(>=2k?)。
不过我并不喜欢这样做,我喜欢绿色软件!所以可以在main.py里面用os.environ修改
环境变量LANG。如果你也打算这样做,一定要把这句写在
_=gettext.translation('messages','.').gettext
的前面

8。未解决的问题:可否程序运行时动态改变显示语言?

好了,下面是我的main.py
import gettext,Tkinter,sys
os.environ.setdefault('lang','en')

def _(s):return s
_=gettext.translation('messages','.').gettext

print _("Hello")

rt=Tkinter.Tk()
bt=Tkinter.Button(text=_("Hello world!").decode('mbcs'),command=sys.exit)
#如果有错误,就去掉.decode('mbcs'),这个可能只在某些windows版本的python上有效
#不过,出了乱码不要怪我
bt.pack()
rt.mainloop()

这个是我的翻译messages.po:
#: main.py:27
msgid "Hello world!"
msgstr "小平,你好!"
#: main.py:24
msgid "Hello"
msgstr "你好"

Jython 2.1 on java1.1.4 (JIT: null)
>>> live='live';print live
live
>>> live=live[::-1];print live
evil
我的用法和标准gettext框架差别应该不是很大吧?

此程序如果所要翻译的语言不是中文,是其他的西文(拉丁语系),根本没有问题,问题可能

是出在了中文要占用两个字节,但无奈手上以及网上的资料真的太少,很难找到方法。

我写的这个程序是因为我要用pygtk来完成一个程序,gtk是基于C的,在C中处理多国语言的问题

只需要三个函数就搞定,   
  bindtextdomain(PACKAGE, LOCALEDIR);
   textdomain(PACKAGE);
   setlocale(LC_ALL, "");

(有兴趣的朋友可以研究一下,不明白的可以向我提出,共同进步吗:)!)

最后希望能告知一下标准的gettext框架
你可以参考plone的多国语言实现啊