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

Sun, 03 Dec 2023 19:46:34 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 03 Dec 2023 19:46:34 +0100
branch
eric7
changeset 10373
093dcebe5ecb
parent 9956
5b138f996a1e
child 10439
21c28b0f9e41
permissions
-rw-r--r--

Corrected some uses of dict.keys(), dict.values() and dict.items().

9956
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the LibreTranslate translation engine.
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import contextlib
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import json
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from PyQt6.QtCore import QByteArray, QTimer, QUrl
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from PyQt6.QtNetwork import QNetworkAccessManager, QNetworkReply, QNetworkRequest
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 from eric7 import Utilities
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from eric7.EricNetwork.EricNetworkProxyFactory import proxyAuthenticationRequired
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from eric7.EricWidgets import EricMessageBox
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 from .TranslationEngine import TranslationEngine
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 class LibreTranslateEngine(TranslationEngine):
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 Class implementing the translation engine for the LibreTranslate service.
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 # Documentation:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 # https://de.libretranslate.com/docs/
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 #
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 # Github
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 # https://github.com/LibreTranslate/LibreTranslate
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 #
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 # Start page:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 # http://localhost:5000
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 # https://translate.argosopentech.com (no API key required)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 def __init__(self, plugin, parent=None):
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 Constructor
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 @param plugin reference to the plugin object
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 @type TranslatorPlugin
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 @param parent reference to the parent object
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @type QObject
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 super().__init__(plugin, parent)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 self.__ui = parent
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 self.__networkManager = QNetworkAccessManager(self)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 self.__networkManager.proxyAuthenticationRequired.connect(
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 proxyAuthenticationRequired
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 )
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 self.__availableTranslations = {}
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 # dictionary of sets of available translations
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 self.__replies = []
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 QTimer.singleShot(0, self.__getTranslationModels)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 def engineName(self):
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 Public method to return the name of the engine.
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 @return engine name
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 @rtype str
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 return "libre_translate"
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 def supportedLanguages(self):
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 Public method to get the supported languages.
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 @return list of supported language codes
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 @rtype list of str
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 """
10373
093dcebe5ecb Corrected some uses of dict.keys(), dict.values() and dict.items().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9956
diff changeset
79 return list(self.__availableTranslations)
9956
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 def supportedTargetLanguages(self, original):
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 Public method to get a list of supported target languages for an
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 original language.
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 @param original original language
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 @type str
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 @return list of supported target languages for the given original
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 @rtype list of str
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 targets = self.__availableTranslations.get(original, set())
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 return list(targets)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 def hasTTS(self):
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 Public method indicating the Text-to-Speech capability.
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 @return flag indicating the Text-to-Speech capability
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 @rtype bool
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 return False
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 def getTranslation(
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 self, requestObject, text, originalLanguage, translationLanguage
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 ):
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 Public method to translate the given text.
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 @param requestObject reference to the request object
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 @type TranslatorRequest
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 @param text text to be translated
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 @type str
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 @param originalLanguage language code of the original
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 @type str
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 @param translationLanguage language code of the translation
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 @type str
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 @return tuple of translated text and flag indicating success
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 @rtype tuple of (str, bool)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 apiKey = self.plugin.getPreferences("libreTranslateKey")
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 translatorUrl = self.plugin.getPreferences("LibreTranslateUrl")
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 if not translatorUrl:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 return (
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 self.tr("LibreTranslate: A valid Language Translator URL is required."),
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 False,
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 )
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 url = QUrl(translatorUrl + "/translate")
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 paramsStr = "source={0}&target={1}&format=text".format(
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 originalLanguage, translationLanguage
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 )
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 if apiKey:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 paramsStr += "&api_key={0}".format(apiKey)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 paramsStr += "&q="
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 params = QByteArray(paramsStr.encode("utf-8"))
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 encodedText = QByteArray(
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 Utilities.html_encode(text).encode("utf-8")
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 ).toPercentEncoding()
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 request = params + encodedText
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 response, ok = requestObject.post(QUrl(url), request)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 if ok:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 try:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 responseDict = json.loads(response)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 except ValueError:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 return self.tr("LibreTranslate: Invalid response received"), False
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 try:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 return Utilities.html_encode(responseDict["translatedText"]), True
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 except KeyError:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 return self.tr("LibreTranslate: No translation available."), False
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 else:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 with contextlib.suppress(ValueError, KeyError):
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 responseDict = json.loads(response)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 return responseDict["error"], False
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 return response, False
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 def __getTranslationModels(self):
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 Private method to get the translation models supported by IBM Watson
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 Language Translator.
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 translatorUrl = self.plugin.getPreferences("LibreTranslateUrl")
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 if not translatorUrl:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 EricMessageBox.critical(
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 self.__ui,
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 self.tr("Error Getting Available Translations"),
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 self.tr("LibreTranslate: A valid Language Translator URL is required."),
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 )
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 return
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 url = QUrl(translatorUrl + "/languages")
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 extraHeaders = [(b"accept", b"application/json")]
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 request = QNetworkRequest(url)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 if extraHeaders:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 for name, value in extraHeaders:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 request.setRawHeader(name, value)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 reply = self.__networkManager.get(request)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 reply.finished.connect(lambda: self.__getTranslationModelsReplyFinished(reply))
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 self.__replies.append(reply)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 def __getTranslationModelsReplyFinished(self, reply):
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 Private slot handling the receipt of the available translations.
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 @param reply reference to the network reply object
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 @type QNetworkReply
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 if reply in self.__replies:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 self.__replies.remove(reply)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 reply.deleteLater()
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 if reply.error() != QNetworkReply.NetworkError.NoError:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 errorStr = reply.errorString()
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 EricMessageBox.critical(
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 self.__ui,
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 self.tr("Error Getting Available Translations"),
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 self.tr(
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 "LibreTranslate: The server sent an error indication."
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 "\n Error: {0}"
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 ).format(errorStr),
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 )
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 return
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 else:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 response = str(reply.readAll(), "utf-8", "replace")
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 try:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 languageEntries = json.loads(response)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 except ValueError:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 EricMessageBox.critical(
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 self.__ui,
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 self.tr("Error Getting Available Translations"),
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 self.tr("LibreTranslate: Invalid response received"),
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 )
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 return
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 for languageEntry in languageEntries:
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 source = languageEntry["code"]
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 self.__availableTranslations[source] = set(languageEntry["targets"])
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 self.availableTranslationsLoaded.emit()
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 def createEngine(plugin, parent=None):
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 Function to instantiate a translator engine object.
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 @param plugin reference to the plugin object
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 @type TranslatorPlugin
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 @param parent reference to the parent object (defaults to None)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 @type QObject (optional)
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 @return reference to the instantiated translator engine object
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 @rtype IbmWatsonEngine
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 """
5b138f996a1e Translator
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 return LibreTranslateEngine(plugin, parent=parent)

eric ide

mercurial