plugins/babel_plugin.py
author Mikael Berthe <mikael@lilotux.net>
Sun, 20 May 2007 09:46:49 +0200
changeset 39 2123977057c5
parent 29 602b355c5e89
permissions -rw-r--r--
Cleanup patch from Loic Berthe

#$ neutron_plugin 01

import babelizer
import russian

def handler_babel_babel(type, source, parameters):
	splitdata = string.split(parameters)
	if len(splitdata) >= 3:
		from_lang = splitdata[0]
		to_lang = splitdata[1]
		body = string.join(splitdata[2:])
		try:
			reply = babelizer.translate(body, from_lang, to_lang)
		except babelizer.LanguageNotAvailableError:
			reply = 'Invalid Language'
		except babelizer.BabelfishChangedError:
			print str(sys.exc_info()[0]) + ' - ' + str(sys.exc_info()[1])
			reply = 'Unknown Error'
	else:
		reply = 'Syntax Error'
	if not reply:
		reply = 'No Results'
	reply = unicode(reply, 'utf-8')
	smsg(type, source, reply)

def handler_babel_tre(type, source, parameters):
	handler_babel_babel(type, source, u'russian english ' + parameters)

def handler_babel_translate(type, source, parameters):
	splitdata = string.split(parameters)
	if len(splitdata) >= 3:
		from_lang = splitdata[0]
		to_lang = splitdata[1]
		body = string.join(splitdata[2:])
		try:
			reply = russian.translate(body, from_lang, to_lang)
		except russian.LanguageNotAvailableError:
			reply = 'Invalid Language'
		except russian.BabelfishChangedError:
			print str(sys.exc_info()[0]) + ' - ' + str(sys.exc_info()[1])
			reply = 'Unknown Error'
	else:
		reply = 'Syntax Error'
	if not reply:
		reply = 'No Results'
	smsg(type, source, reply)

def handler_babel_enru(type, source, parameters):
	handler_babel_translate(type, source, u'e r ' + parameters)

def handler_babel_babelize(type, source, parameters):
	splitdata = string.split(parameters)
	if len(splitdata) >= 3:
		from_lang = splitdata[0]
		through_lang = splitdata[1]
		body = string.join(splitdata[2:])
		try:
			results = babelizer.babelize(body, from_lang, through_lang)
			reply = ''
			for result in results:
				reply += '\n' + result.decode('utf-8', 'replace')
		except babelizer.LanguageNotAvailableError:
			reply = 'Invalid Language'
		except babelizer.BabelfishChangedError:
			print str(sys.exc_info()[0]) + ' - ' + str(sys.exc_info()[1])
			reply = 'Unknown Error'
	else:
		reply = 'Syntax Error'
	if not reply:
		reply = 'No Results'
	smsg(type, source, reply)

def handler_babel_esperanto(type, source, parameters):
	formdata = 'al=2&de=3&al-k=4&teksto=' + urllib.quote(parameters)
	import socket
	s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	s.connect(('lingvo.org', 80))
	s.send("""POST /cgi-bin/eoxx/eoxx HTTP/1.1
User-Agent: Mozilla/5.0 (compatible; Konqueror/3; Linux 2.4.18)
Pragma: no-cache
Cache-control: no-cache
Accept: text/*, image/jpeg, image/png, image/*, */*
Accept-Encoding: x-gzip, gzip, identity
Accept-Charset: ISO-8859-1, utf-8;q=0.5, *;q=0.5
Accept-Language: en, POSIX
Host: lingvo.org
Content-Type: application/x-www-form-urlencoded
Content-Length: """ + str(len(formdata)) + '\n\n' + formdata + '\n\n')
	pagedata = s.recv(1024)
	s.close()
	#formdata = urllib.urlencode({'al': '2', 'de': '3', 'al-k': '4', 'teksto': parameters})
	#f = urllib.urlopen('http://lingvo.org/cgi-bin/eoxx/eoxx', formdata)
	#pagedata = f.read()
	#print pagedata
	try:
		reply = string.split(string.split(pagedata, 'lang="en">')[1], '</font>')[0].strip()
	except:
		reply = 'Unknown Error'
	smsg(type, source, reply)

register_command_handler(handler_babel_babel, '!babel', 0, 'Translate a phrase from one language to another using AltaVista BabelFish.', '!babel <fromlang> <tolang> <phrase>', ['!babel english spanish hello', '!babel fr en bonjour'])

register_command_handler(handler_babel_translate, '!translate', 0, 'Translate a phrase from one language to another using translate.ru.', '!translate <fromlang> <tolang> <phrase>', ['!translate e s hello', '!translate f e bonjour'])

# examples: register_command_handler(handler_babel_tre, '!tre', 0, 'Translate a phrase from Russian to English (shortcut).', '!tre <phrase>', ['!tre ????????'])

# register_command_handler(handler_babel_enru, '!enru', 0, 'Translate a phrase from English to Russian (shortcut).', '!enru <phrase>', ['!enru the tortoise'])

# register_command_handler(handler_babel_esperanto, '!esperanto', 0, 'Translate a phrase from Esperanto to English.', '!esperanto <phrase>', ['!esperanto Saluton!'])

#register_command_handler(handler_babel_babelize, '!babelize', 0, 'Translate a phrase back and forth from one language to another (gives interesting results).', '!babelize <fromlang> <throughlang> <phrase>', ['!babelize english spanish hello'])