src/eric7/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MyMemoryEngine.py

branch
eric7
changeset 9209
b99e7fd55fd3
parent 9148
b31f0d894b55
child 9221
bf71ee032bb4
equal deleted inserted replaced
9208:3fc8dfeb6ebe 9209:b99e7fd55fd3
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2014 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the MyMemory translation engine.
8 """
9
10 import json
11
12 from PyQt6.QtCore import QUrl, QTimer
13
14 from .TranslationEngine import TranslationEngine
15
16
17 class MyMemoryEngine(TranslationEngine):
18 """
19 Class implementing the translation engine for the MyMemory
20 translation service.
21 """
22 TranslatorUrl = "http://api.mymemory.translated.net/get"
23 TranslatorLimit = 500
24
25 def __init__(self, plugin, parent=None):
26 """
27 Constructor
28
29 @param plugin reference to the plugin object
30 @type TranslatorPlugin
31 @param parent reference to the parent object
32 @type QObject
33 """
34 super().__init__(plugin, parent)
35
36 QTimer.singleShot(0, self.availableTranslationsLoaded.emit)
37
38 def engineName(self):
39 """
40 Public method to return the name of the engine.
41
42 @return engine name
43 @rtype str
44 """
45 return "mymemory"
46
47 def supportedLanguages(self):
48 """
49 Public method to get the supported languages.
50
51 @return list of supported language codes
52 @rtype list of str
53 """
54 return ["ar", "be", "bg", "bs", "ca", "cs", "da", "de", "el", "en",
55 "es", "et", "fi", "fr", "ga", "gl", "hi", "hr", "hu", "id",
56 "is", "it", "iw", "ja", "ka", "ko", "lt", "lv", "mk", "mt",
57 "nl", "no", "pl", "pt", "ro", "ru", "sk", "sl", "sq", "sr",
58 "sv", "th", "tl", "tr", "uk", "vi", "zh-CN", "zh-TW",
59 ]
60
61 def getTranslation(self, requestObject, text, originalLanguage,
62 translationLanguage):
63 """
64 Public method to translate the given text.
65
66 @param requestObject reference to the request object
67 @type TranslatorRequest
68 @param text text to be translated
69 @type str
70 @param originalLanguage language code of the original
71 @type str
72 @param translationLanguage language code of the translation
73 @type str
74 @return tuple of translated text and flag indicating success
75 @rtype tuple of (str, bool)
76 """
77 if len(text) > self.TranslatorLimit:
78 return (
79 self.tr("MyMemory: Only texts up to {0} characters are"
80 " allowed.")
81 .format(self.TranslatorLimit),
82 False
83 )
84
85 myMemoryKey = self.plugin.getPreferences("MyMemoryKey")
86 keyParam = "&key={0}".format(myMemoryKey) if myMemoryKey else ""
87
88 myMemoryEmail = self.plugin.getPreferences("MyMemoryEmail")
89 emailParam = "&de={0}".format(myMemoryEmail) if myMemoryEmail else ""
90
91 params = "?of=json{3}{4}&langpair={0}|{1}&q={2}".format(
92 originalLanguage, translationLanguage, text,
93 keyParam, emailParam)
94 url = QUrl(self.TranslatorUrl + params)
95 response, ok = requestObject.get(url)
96 if ok:
97 response = str(response, "utf-8", "replace")
98 try:
99 responseDict = json.loads(response)
100 except ValueError:
101 return self.tr("MyMemory: Invalid response received"), False
102 result = responseDict["responseData"]["translatedText"]
103 else:
104 result = response
105 return result, ok

eric ide

mercurial