eric7/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/PromtEngine.py

branch
eric7
changeset 8312
800c432b34c8
parent 8217
385f60c94548
child 8318
962bce857696
equal deleted inserted replaced
8311:4e8b98454baa 8312:800c432b34c8
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2014 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the Promt translation engine.
8 """
9
10 import json
11
12 from PyQt5.QtCore import QUrl, QByteArray, QTimer
13
14 import Utilities
15
16 from .TranslationEngine import TranslationEngine
17
18
19 class PromtEngine(TranslationEngine):
20 """
21 Class implementing the translation engine for the Promt
22 translation service.
23 """
24 TranslatorUrl = (
25 "http://www.online-translator.com/services/"
26 "TranslationService.asmx/GetTranslation"
27 )
28
29 def __init__(self, plugin, parent=None):
30 """
31 Constructor
32
33 @param plugin reference to the plugin object (TranslatorPlugin)
34 @param parent reference to the parent object (QObject)
35 """
36 super().__init__(plugin, parent)
37
38 self.__mapping = {
39 "de": "g",
40 "en": "e",
41 "es": "s",
42 "fr": "f",
43 "it": "i",
44 "ja": "j",
45 "pt": "p",
46 "ru": "r",
47 }
48
49 QTimer.singleShot(0, self.availableTranslationsLoaded.emit)
50
51 def engineName(self):
52 """
53 Public method to return the name of the engine.
54
55 @return engine name (string)
56 """
57 return "promt"
58
59 def supportedLanguages(self):
60 """
61 Public method to get the supported languages.
62
63 @return list of supported language codes (list of string)
64 """
65 return ["de", "en", "es", "fr", "it", "ja", "pt", "ru", ]
66
67 def getTranslation(self, requestObject, text, originalLanguage,
68 translationLanguage):
69 """
70 Public method to translate the given text.
71
72 @param requestObject reference to the request object
73 (TranslatorRequest)
74 @param text text to be translated (string)
75 @param originalLanguage language code of the original (string)
76 @param translationLanguage language code of the translation (string)
77 @return tuple of translated text (string) and flag indicating
78 success (boolean)
79 """
80 encodedText = str(
81 QUrl.toPercentEncoding(Utilities.html_encode(text + ".")),
82 "utf-8")
83 request = QByteArray(
84 "{{dirCode:'{0}{1}', template:'General', text:'{2}', lang:'de',"
85 " limit:3000, useAutoDetect:true, key:'', ts:'MainSite', tid:''}}"
86 .format(self.__mapping[originalLanguage],
87 self.__mapping[translationLanguage],
88 encodedText).encode("utf-8")
89 )
90 response, ok = requestObject.post(QUrl(self.TranslatorUrl), request,
91 "json")
92 if ok:
93 try:
94 responseDict = json.loads(response)
95 except ValueError:
96 return self.tr("Promt: Invalid response received"), False
97
98 responseDict = responseDict.get("d", responseDict)
99 result = responseDict["result"][:-1] # get rid of stub
100
101 if responseDict["errCode"] == 0:
102 if responseDict["ptsDirCode"] == "":
103 result = self.tr(
104 "Promt: This direction of translation is not"
105 " available.")
106 ok = False
107 else:
108 result = responseDict["errMessage"]
109 ok = False
110 else:
111 result = response
112 return result, ok

eric ide

mercurial