Source code for steno.translator

# -*- coding: utf-8 -*-
"""
.. module:: translator
   :platform: Unix, Windows
   :sinopsys: Language translation behavior

.. moduleauthor:: Anton Konyshev <anton.konyshev@gmail.com>

"""

import threading

import google_translate_api as gtapi


[docs]class Translator(gtapi.TranslateService): """Customization of :class:`google_translate_api.TranslateService` mainly for output formatting. """
[docs] def __init__(self): """:class:`Translator` serves to interact with Google Translate API.""" super(Translator, self).__init__() self.lock = threading.Lock()
[docs] def trans_details(self, source_lang, target_lang, value): """Performs translation and formats detailed output. Suitable options for `source_lang` and `target_lang` parameters stored in :const:`defaults.Config.LANGUAGES`. :param source_lang: Source language of the `value` :type source_lang: str or unicode :param target_lang: Language of the translation :type target_lang: str or unicode :param value: Text or word :returns: Translation with details :rtype: unicode """ response = super(Translator, self).trans_details(source_lang, target_lang, value) result = u'' if response: try: sentence = response.get(u'sentences', [])[0] except IndexError: sentence = {} try: details = response.get(u'dict', []) except IndexError: details = [] result = u'\n'.join([ sentence.get(u'orig', u''), sentence.get(u'trans', u''), u'', u'Translit: {0}'.format(sentence.get(u'translit', u'')), ]) for form in details: result = u'\n'.join([ result, u'', u'{0} | {1}'.format(form.get(u'base_form', u''), form.get(u'pos', u'')), ]) for entry in form.get(u'entry', []): result = u' '.join([ result, u'\n', u' {0}: '.format(entry.get(u'word', u'')), u', '.join(entry.get(u'reverse_translation', [])), u'[{0}]'.format(int(entry.get(u'score', 0.0) * 10000)), ]) result = u'\n'.join([result, u'', u' Phrases:']) for term in form.get(u'terms', []): result = u'\n '.join([result, term]) return result