Skip to content
Commits on Source (5)
......@@ -38,84 +38,84 @@ class GoogleTranslateModule(Module, CapTranslate):
NAME = 'googletranslate'
DESCRIPTION = u'Google translation web service'
BROWSER = GoogleTranslateBrowser
GOOGLELANGUAGE = {
'Arabic': 'ar',
'Afrikaans': 'af',
'Albanian': 'sq',
'Armenian': 'hy',
'Azerbaijani': 'az',
'Basque': 'eu',
'Belarusian': 'be',
'Bengali': 'bn',
'Bulgarian': 'bg',
'Catalan': 'ca',
'Chinese': 'zh-CN',
'Croatian': 'hr',
'Czech': 'cs',
'Danish': 'da',
'Dutch': 'nl',
'English': 'en',
'Esperanto': 'eo',
'Estonian': 'et',
'Filipino': 'tl',
'Finnish': 'fi',
'French': 'fr',
'Galician': 'gl',
'Georgian': 'ka',
'German': 'de',
'Greek': 'el',
'Gujarati': 'gu',
'Haitian': 'ht',
'Hebrew': 'iw',
'Hindi': 'hi',
'Hungaric': 'hu',
'Icelandic': 'is',
'Indonesian': 'id',
'Irish': 'ga',
'Italian': 'it',
'Japanese': 'ja',
'Kannada': 'kn',
'Korean': 'ko',
'Latin': 'la',
'Latvian': 'lv',
'Lithuanian': 'lt',
'Macedonian': 'mk',
'Malay': 'ms',
'Maltese': 'mt',
'Norwegian': 'no',
'Persian': 'fa',
'Polish': 'pl',
'Portuguese': 'pt',
'Romanian': 'ro',
'Russian': 'ru',
'Serbian': 'sr',
'Slovak': 'sk',
'Slovenian': 'sl',
'Spanish': 'es',
'Swahili': 'sw',
'Swedish': 'sv',
'Tamil': 'ta',
'Telugu': 'te',
'Thai': 'th',
'Turkish': 'tr',
'Ukrainian': 'uk',
'Urdu': 'ur',
'Vietnamese': 'vi',
'Welsh': 'cy',
'Yiddish': 'yi',
}
GOOGLELANGUAGE = [
'ar',
'af',
'sq',
'hy',
'az',
'eu',
'be',
'bn',
'bg',
'ca',
'zh-CN',
'hr',
'cs',
'da',
'nl',
'en',
'eo',
'et',
'tl',
'fi',
'fr',
'gl',
'ka',
'de',
'el',
'gu',
'ht',
'iw',
'hi',
'hu',
'is',
'id',
'ga',
'it',
'ja',
'kn',
'ko',
'la',
'lv',
'lt',
'mk',
'ms',
'mt',
'no',
'fa',
'pl',
'pt',
'ro',
'ru',
'sr',
'sk',
'sl',
'es',
'sw',
'sv',
'ta',
'te',
'th',
'tr',
'uk',
'ur',
'vi',
'cy',
'yi',
]
def translate(self, lan_from, lan_to, text):
if lan_from not in self.GOOGLELANGUAGE.keys():
if lan_from not in self.GOOGLELANGUAGE:
raise LanguageNotSupported()
if lan_to not in self.GOOGLELANGUAGE.keys():
if lan_to not in self.GOOGLELANGUAGE:
raise LanguageNotSupported()
translation = Translation(0)
translation.lang_src = self.GOOGLELANGUAGE[lan_from]
translation.lang_dst = self.GOOGLELANGUAGE[lan_to]
translation.text = self.browser.translate(self.GOOGLELANGUAGE[lan_from], self.GOOGLELANGUAGE[lan_to], text)
translation.lang_src = lan_from
translation.lang_dst = lan_to
translation.text = self.browser.translate(lan_from, lan_to, text)
if empty(translation.text):
raise TranslationFail()
......
......@@ -25,13 +25,10 @@
class LarousseBrowser(PagesBrowser):
BASEURL = 'http://www.larousse.fr'
BASEURL = 'https://www.larousse.fr'
langlist = URL('/dictionnaires/bilingues$', LangList)
# warning: the order of params is important...
word = URL(r'/dictionnaires/rechercher\?q=(?P<word>.*)&l=(?P<src>\w+)-(?P<dst>\w+)&culture=',
r'/dictionnaires/(?P<src>\w+)-(?P<dst>\w+)/(?P<word>[^/]+)(?:/(?P<id>\d+))?',
WordPage)
word = URL(r'/dictionnaires/(?P<src>\w+)-(?P<dst>\w+)/(?P<word>.*)', WordPage)
LANGS = None
......
......@@ -27,13 +27,13 @@
from weboob.browser.pages import HTMLPage
CODES = {
'allemand': 'German',
'anglais': 'English',
'arabe': 'Arabic',
'chinois': 'Chinese',
'espagnol': 'Spanish',
'francais': 'French',
'italien': 'Italian',
'allemand': 'de',
'anglais': 'en',
'arabe': 'ar',
'chinois': 'zh',
'espagnol': 'es',
'francais': 'fr',
'italien': 'it',
}
RCODES = {v: k for k, v in CODES.items()}
......@@ -41,14 +41,12 @@
class LangList(HTMLPage):
def get_langs(self):
res = {}
for a in self.doc.xpath('//ul[@class="menu-items"]/li//a'):
for a in self.doc.xpath('//a[@class="item-dico-bil"]'):
url = a.attrib['href']
mtc = re.search(r'/dictionnaires/(\w+)-(\w+)', url)
if not mtc:
continue
src, dst = mtc.groups()
if dst == 'monolingue':
continue
res[CODES[src], CODES[dst]] = (src, dst)
return res
......
......@@ -36,20 +36,31 @@ class WordReferenceModule(Module, CapTranslate):
NAME = 'wordreference'
DESCRIPTION = u'Free online translator'
BROWSER = WordReferenceBrowser
WRLANGUAGE = {
'Arabic': 'ar', 'Chinese': 'zh', 'Czech': 'cz', 'English': 'en', 'French': 'fr', 'Greek': 'gr',
'Italian': 'it', 'Japanese': 'ja', 'Korean': 'ko', 'Polish': 'pl', 'Portuguese': 'pt',
'Romanian': 'ro', 'Spanish': 'es', 'Turkish': 'tr',
}
WRLANGUAGE = [
'ar',
'zh',
'cz',
'en',
'fr',
'gr',
'it',
'ja',
'ko',
'pl',
'pt',
'ro',
'es',
'tr',
]
def translate(self, lan_from, lan_to, text):
if lan_from not in self.WRLANGUAGE.keys():
if lan_from not in self.WRLANGUAGE:
raise LanguageNotSupported()
if lan_to not in self.WRLANGUAGE.keys():
if lan_to not in self.WRLANGUAGE:
raise LanguageNotSupported()
translations = self.browser.translate(self.WRLANGUAGE[lan_from], self.WRLANGUAGE[lan_to], text)
translations = self.browser.translate(lan_from, lan_to, text)
has_translation = False
for translation in translations:
......
......@@ -153,6 +153,7 @@ def install_weboob(qt, xdg):
'unidecode',
'Pillow',
'futures; python_version < "3.2"',
'Babel',
]
try:
......
......@@ -38,8 +38,8 @@ def log(message, success='done'):
def create_compat_dir(name):
if not path.exists(name):
makedirs(name)
with open(path.join(name, '__init__.py'), 'w'):
pass
with open(path.join(name, '__init__.py'), 'w'):
pass
MANUAL_PORTS = [
......
......@@ -19,10 +19,13 @@
from __future__ import print_function
import re
from weboob.capabilities.translate import CapTranslate, TranslationFail, LanguageNotSupported
from weboob.tools.application.repl import ReplApplication
from weboob.tools.application.formatters.iformatter import IFormatter
from babel.core import Locale, UnknownLocaleError
from babel.localedata import locale_identifiers
__all__ = ['Translaboob']
......@@ -57,18 +60,19 @@ class Translaboob(ReplApplication):
}
COMMANDS_FORMATTERS = {'translate': 'translation',
}
LANGUAGE = {
'ar': 'Arabic', 'af': 'Afrikaans', 'sq': 'Albanian', 'hy': 'Armenian', 'az': 'Azerbaijani', 'eu': 'Basque', 'be': 'Belarusian',
'bn': 'Bengali', 'bg': 'Bulgarian', 'ca': 'Catalan', 'zh': 'Chinese', 'hr': 'Croatian', 'cz': 'Czech', 'da': 'Danish',
'nl': 'Dutch', 'en': 'English', 'eo': 'Esperanto', 'et': 'Estonian', 'tl': 'Filipino', 'fi': 'Finnish', 'fr': 'French',
'gl': 'Galician', 'ka': 'Georgian', 'de': 'German', 'gr': 'Greek', 'gu': 'Gujarati', 'ht': 'Haitian', 'iw': 'Hebrew',
'hi': 'Hindi', 'hu': 'Hungaric', 'is': 'Icelandic', 'id': 'Indonesian', 'ga': 'Irish', 'it': 'Italian', 'ja': 'Japanese',
'kn': 'Kannada', 'ko': 'Korean', 'la': 'Latin', 'lv': 'Latvian', 'lt': 'Lithuanian', 'mk': 'Macedonian', 'ms': 'Malay',
'mt': 'Maltese', 'no': 'Norwegian', 'fa': 'Persian', 'pl': 'Polish', 'pt': 'Portuguese', 'ro': 'Romanian', 'ru': 'Russian',
'sr': 'Serbian', 'sk': 'Slovak', 'sl': 'Slovenian', 'es': 'Spanish', 'sw': 'Swahili', 'sv': 'Swedish', 'ta': 'Tamil',
'te': 'Telugu', 'th': 'Thai', 'tr': 'Turkish', 'uk': 'Ukrainian', 'ur': 'Urdu', 'vi': 'Vietnamese', 'cy': 'Welsh', 'yi': 'Yiddish',
'nigger': 'Nigger!',
}
def parse_lang(self, s):
try:
locale = Locale.parse(s)
except UnknownLocaleError:
pattern = re.compile(r'\b%s\b' % re.escape(s), re.I)
for locale_id in locale_identifiers():
locale = Locale.parse(locale_id)
if pattern.search(locale.english_name):
return locale.language
return s
else:
return locale.language
def do_translate(self, line):
"""
......@@ -103,16 +107,14 @@ def do_translate(self, line):
lan_from, lan_to, text = self.parse_command_args(line, 3, 2)
try:
if lan_from not in self.LANGUAGE.keys():
raise LanguageNotSupported()
if lan_to not in self.LANGUAGE.keys():
raise LanguageNotSupported()
lan_from = self.parse_lang(lan_from)
lan_to = self.parse_lang(lan_to)
if not text or text == '-':
text = self.acquire_input()
self.start_format(source=text)
for translation in self.do('translate', self.LANGUAGE[lan_from], self.LANGUAGE[lan_to], text):
for translation in self.do('translate', lan_from, lan_to, text):
self.format(translation)
except (TranslationFail, LanguageNotSupported) as error:
print(error, file=self.stderr)
......