Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMateusz Biliński <mateusz.bilinski@gmail.com>2008-08-25 21:20:16 +0400
committerMateusz Biliński <mateusz.bilinski@gmail.com>2008-08-25 21:20:16 +0400
commit8c75ed38b1eebd920fba99417ebb7ff273f2fa13 (patch)
tree476176eb6a16cd62e9cba7dcd79b1172a8e5ce9a /plugins
parentc0a26be684cdbf613939052ef91b37afba5e20f3 (diff)
Google Translation plugin added (proof-of-concept) that translates incoming chat messages from English to French using Google Translate service.
Plugin object that registered new event is accessible in that event now, through self.plugin.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/google_translation/__init__.py1
-rw-r--r--plugins/google_translation/plugin.py115
2 files changed, 116 insertions, 0 deletions
diff --git a/plugins/google_translation/__init__.py b/plugins/google_translation/__init__.py
new file mode 100644
index 000000000..33fb27f0f
--- /dev/null
+++ b/plugins/google_translation/__init__.py
@@ -0,0 +1 @@
+from plugin import GoogleTranslationPlugin \ No newline at end of file
diff --git a/plugins/google_translation/plugin.py b/plugins/google_translation/plugin.py
new file mode 100644
index 000000000..55bf0dd10
--- /dev/null
+++ b/plugins/google_translation/plugin.py
@@ -0,0 +1,115 @@
+# -*- coding: utf-8 -*-
+##
+## This file is part of Gajim.
+##
+## Gajim is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published
+## by the Free Software Foundation; version 3 only.
+##
+## Gajim is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
+##
+'''
+Google Translation plugin.
+
+Translates (currently only incoming) messages using Google Translate.
+
+:note: consider this as proof-of-concept
+:author: Mateusz Biliński <mateusz@bilinski.it>
+:since: 25th August 2008
+:copyright: Copyright (2008) Mateusz Biliński <mateusz@bilinski.it>
+:license: GPL
+'''
+
+import re
+import urllib2
+import new
+from pprint import pformat
+
+from common import helpers
+from common import gajim
+
+from plugins import GajimPlugin
+from plugins.helpers import log_calls, log
+from common import ged
+from common import nec
+
+class GoogleTranslationPlugin(GajimPlugin):
+ name = u'Google Translation'
+ short_name = u'google_translation'
+ version = u'0.1'
+ description = u'''Translates (currently only incoming) messages using Google Translate.'''
+ authors = [u'Mateusz Biliński <mateusz@bilinski.it>']
+ homepage = u'http://blog.bilinski.it'
+
+ @log_calls('GoogleTranslationPlugin')
+ def init(self):
+ self.config_dialog = None
+ #self.gui_extension_points = {}
+ self.config_default_values = {'from_lang' : ('en', _('Language of text to be translated')),
+ 'to_lang' : ('fr', _('Language to which translation will be made')),
+ 'user_agent' : ('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.12) Gecko/20080213 Firefox/2.0.0.11',
+ _('User Agent data to be used with urllib2 when connecting to Google Translate service'))}
+
+ #self.events_handlers = {}
+
+ self.events = [GoogleTranslateMessageReceivedEvent]
+
+ self.translated_text_re = \
+ re.compile(r'google.language.callbacks.id100\(\'22\',{"translatedText":"(?P<text>[^"]*)"}, 200, null, 200\)')
+
+ def translate_text(self, text, from_lang, to_lang):
+ text = self.prepare_text_for_url(text)
+ headers = { 'User-Agent' : self.config['user_agent'] }
+ translation_url = 'http://www.google.com/uds/Gtranslate?callback=google.language.callbacks.id100&context=22&q=%(text)s&langpair=%(from_lang)s%%7C%(to_lang)s&key=notsupplied&v=1.0'%locals()
+
+ request = urllib2.Request(translation_url, headers=headers)
+ response = urllib2.urlopen(request)
+ results = response.read()
+
+ translated_text = self.translated_text_re.search(results).group('text')
+
+ return translated_text
+
+ def prepare_text_for_url(self, text):
+ '''
+ Converts text so it can be used within URL as query to Google Translate.
+ '''
+
+ # There should be more replacements for plugin to work in any case:
+ char_replacements = { ' ' : '%20',
+ '+' : '%2B'}
+
+ for char, replacement in char_replacements.iteritems():
+ text = text.replace(char, replacement)
+
+ return text
+
+ def activate(self):
+ pass
+
+ def deactivate(self):
+ pass
+
+class GoogleTranslateMessageReceivedEvent(nec.NetworkIncomingEvent):
+ name = 'google-translate-message-received'
+ base_network_events = ['raw-message-received']
+
+ def generate(self):
+ msg_type = self.base_event.xmpp_msg.attrs['type']
+ if msg_type == u'chat':
+ msg_text = "".join(self.base_event.xmpp_msg.kids[0].data)
+ if msg_text:
+ from_lang = self.plugin.config['from_lang']
+ to_lang = self.plugin.config['to_lang']
+ self.base_event.xmpp_msg.kids[0].setData(
+ self.plugin.translate_text(msg_text, from_lang, to_lang))
+
+ return False # We only want to modify old event, not emit another,
+ # so we return False here.
+