From: <fri...@us...> - 2011-11-11 09:00:30
|
Revision: 17920 http://translate.svn.sourceforge.net/translate/?rev=17920&view=rev Author: friedelwolff Date: 2011-11-11 09:00:17 +0000 (Fri, 11 Nov 2011) Log Message: ----------- Support multilingual servers by optionally specifying the 'system' Modified Paths: -------------- src/trunk/virtaal/virtaal/plugins/tm/models/moses.py src/trunk/virtaal/virtaal/support/mosesclient.py Modified: src/trunk/virtaal/virtaal/plugins/tm/models/moses.py =================================================================== --- src/trunk/virtaal/virtaal/plugins/tm/models/moses.py 2011-11-11 07:33:43 UTC (rev 17919) +++ src/trunk/virtaal/virtaal/plugins/tm/models/moses.py 2011-11-11 09:00:17 UTC (rev 17920) @@ -45,11 +45,19 @@ def _init_plugin(self): from virtaal.support.mosesclient import MosesClient + # let's map servers to clients to detect duplicates + client_map = {} for lang_pair, server in self.config.iteritems(): pair = lang_pair.split("->") if self.clients.get(pair[0]) is None: self.clients[pair[0]] = {} - self.clients[pair[0]].update({pair[1]: MosesClient(server)}) + if server in client_map: + client = client_map[server] + client.set_multilang() + else: + client = MosesClient(server) + client_map[server] = client + self.clients[pair[0]].update({pair[1]: client}) # METHODS # @@ -61,7 +69,7 @@ return client = self.clients[self.source_lang][self.target_lang] - client.translate_unit(query_str, self._handle_response) + client.translate_unit(query_str, self._handle_response, self.target_lang) return def _handle_response(self, id, response): Modified: src/trunk/virtaal/virtaal/support/mosesclient.py =================================================================== --- src/trunk/virtaal/virtaal/support/mosesclient.py 2011-11-11 07:33:43 UTC (rev 17919) +++ src/trunk/virtaal/virtaal/support/mosesclient.py 2011-11-11 09:00:17 UTC (rev 17920) @@ -41,13 +41,27 @@ HTTPClient.__init__(self) self.url = url + '/RPC2' + self.multilang = False - def translate_unit(self, unit_source, callback=None): + def set_multilang(self, state=True): + """Enable multilingual support. + + If this is set, the plugin will specify the 'system' parameter when + communicating with the Moses XML RPC server.""" + self.multilang = state + + def translate_unit(self, unit_source, callback=None, target_language=None): if isinstance(unit_source, unicode): unit_source = unit_source.encode("utf-8") + parameters = { + 'text': unit_source, + } + if self.multilang: + parameters['system'] = target_language + request_body = xmlrpclib.dumps( - ({'text': unit_source},), "translate" + (parameters,), "translate" ) request = HTTPRequest( self.url, "POST", request_body, @@ -67,6 +81,11 @@ """Does the loading of the XML-RPC response, but handles exceptions.""" try: (data,), _fish = xmlrpclib.loads(response) + except xmlrpclib.Fault, exc: + if "Unknown translation system id" in exc.faultString: + self.set_multilang(False) + #TODO: consider redoing the request now that multilang is False + return None except Exception, exc: logging.debug('XML-RPC exception: %s' % (exc)) return None This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |