2008年9月7日 星期日

用 xmpppy 和 Google Talk bot 制作命令行翻译机器人

命令行偏执狂们都喜欢用字符命令搞定一切,当然应该包括翻译在内。最近兄弟我在翻译 Django 1.0 的 zh_CN locale 文件时,颇为那一大堆国名地名所困扰。为了准确翻译,要把这些名词逐一在 PoeditPidgin(我用的是 Google Talk en2zh bot: en2zh@bot.talk.google.com)两个窗口之间来回反复拷贝粘贴。拷贝原文,粘贴原文,回车,拷贝译文,粘贴译文——翻译一个地名至少需要耗费五步操作,翻译两百个地名就是一千次操作,怎么不头晕呢?

于是就想到利用 xmpppy 来制作一个 en2zh 命令行工具,实现自动翻译。好在 xmpppy 已经提供了 xtalk.py 代码样例,只要略作修改即可:

--- xtalk.py 2006-10-06 20:30:42.000000000 +0800
+++ en2zh.py 2008-09-07 08:37:22.000000000 +0800
@@ -1,4 +1,6 @@
#!/usr/bin/python
+# en2zh.py = xtalk.py + en2zh@bot.talk.google.com
+# @Copyleft 2008 hutuworm (http://hutuworm.blogspot.com)
# $Id: xtalk.py,v 1.2 2006/10/06 12:30:42 normanr Exp $
import sys,os,xmpp,time,select

@@ -15,7 +17,8 @@
type = event.getType()
fromjid = event.getFrom().getStripped()
if type in ['message', 'chat', None] and fromjid == self.remotejid:
- sys.stdout.write(event.getBody() + '\n')
+ sys.stdout.write(event.getBody().encode('utf8') + '\n' )
+ sys.exit(0)

def stdio_message(self, message):
m = xmpp.protocol.Message(to=self.remotejid,body=message,typ='chat')
@@ -27,22 +30,23 @@
if not con:
sys.stderr.write('could not connect!\n')
return False
- sys.stderr.write('connected with %s\n'%con)
+ #sys.stderr.write('connected with %s\n'%con)
auth=self.jabber.auth(jid.getNode(),jidparams['password'],resource=jid.getResource())
if not auth:
sys.stderr.write('could not authenticate!\n')
return False
- sys.stderr.write('authenticated using %s\n'%auth)
+ #sys.stderr.write('authenticated using %s\n'%auth)
self.register_handlers()
return con

if __name__ == '__main__':

if len(sys.argv) < 2:
- print "Syntax: xtalk JID"
+ print "Syntax: en2zh text"
sys.exit(0)

- tojid=sys.argv[1]
+ tojid='en2zh@bot.talk.google.com'
+ text=sys.argv[1]

jidparams={}
if os.access(os.environ['HOME']+'/.xtalk',os.R_OK):
@@ -66,6 +70,8 @@
sys.exit(1)

#cl.SendInitPresence(requestRoster=0) # you may need to uncomment this for old server
+
+ bot.stdio_message(text)

socketlist = {cl.Connection._sock:'xmpp',sys.stdin:'stdio'}
online = 1


或者直接下载修改后的 en2zh.py: http://github.com/hutuworm/minitrue/tree/master/en2zh.py

然后按以下步骤设置并使用:

0. 安装 xmpppy: $ easy_install xmpppy

1. 在 home 目录中创建 .xtalk 配置文件,设定你的 Google Talk 用户名和密码,为了安全起见,必须将该文件权限设为 0600:

$ cat .xtalk

#Uncomment fields before use and type in correct credentials. #JID=romeo@montague.net/resource (/resource is optional) #PASSWORD=juliet

JID=your-id@gmail.com

PASSWORD=your-password

$ chmod 0600 .xtalk



2. 测试翻译:

$ python en2zh.py "Bosnia and Herzegovina"

波斯尼亚和黑塞哥维那



3. 自行编写任意命令代码,调用 en2zh.py 完成自动翻译工作。(注意:Google Talk en2zh bot 比较适合翻译名词、短语,翻译完毕之后无论如何一定要检查一遍。)

3 评论:

Fenng 说...

超赞!

BTW: blogspot 这模板真的不错啊

ppsly 说...

发现博主最近两个月发文量突然增大~~

^_^ 继续加油啊~~

hutuworm 说...

其实是惯性使然。此前每个月至少要输出八万字,交稿之后突然停了下来,刹车刹不住,只好再往前滑行一段,留下一些车胎烧灼的印迹。

感谢关注! :)

闲话闲说