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

branch
eric7
changeset 10131
4488684d1b7d
parent 9653
e67609152c5e
child 10439
21c28b0f9e41
equal deleted inserted replaced
10130:c444a1721e23 10131:4488684d1b7d
8 """ 8 """
9 9
10 import json 10 import json
11 11
12 from PyQt6.QtCore import QByteArray, QTimer, QUrl 12 from PyQt6.QtCore import QByteArray, QTimer, QUrl
13
14 from eric7 import Utilities
15 13
16 from .TranslationEngine import TranslationEngine 14 from .TranslationEngine import TranslationEngine
17 15
18 16
19 class DeepLEngine(TranslationEngine): 17 class DeepLEngine(TranslationEngine):
24 22
25 TranslatorUrls = { 23 TranslatorUrls = {
26 "pro": "https://api.deepl.com/v2/translate", 24 "pro": "https://api.deepl.com/v2/translate",
27 "free": "https://api-free.deepl.com/v2/translate", 25 "free": "https://api-free.deepl.com/v2/translate",
28 } 26 }
29 MaxTranslationTextLen = 30 * 1024 27 MaxTranslationTextLen = 128 * 1024
30 28
31 def __init__(self, plugin, parent=None): 29 def __init__(self, plugin, parent=None):
32 """ 30 """
33 Constructor 31 Constructor
34 32
70 "fr", 68 "fr",
71 "hu", 69 "hu",
72 "id", 70 "id",
73 "it", 71 "it",
74 "ja", 72 "ja",
73 "ko",
75 "lt", 74 "lt",
76 "lv", 75 "lv",
76 "nb",
77 "nl", 77 "nl",
78 "pl", 78 "pl",
79 "pt", 79 "pt",
80 "ro", 80 "ro",
81 "ru", 81 "ru",
115 115
116 apiKey = self.plugin.getPreferences("DeeplKey") 116 apiKey = self.plugin.getPreferences("DeeplKey")
117 if not apiKey: 117 if not apiKey:
118 return self.tr("A valid DeepL Pro key is required."), False 118 return self.tr("A valid DeepL Pro key is required."), False
119 119
120 params = QByteArray(
121 "auth_key={0}&source_lang={1}&target_lang={2}&text=".format(
122 apiKey, originalLanguage.upper(), translationLanguage.upper()
123 ).encode("utf-8")
124 )
125 encodedText = QByteArray(
126 Utilities.html_encode(text).encode("utf-8")
127 ).toPercentEncoding()
128 request = params + encodedText
129 translatorUrl = ( 120 translatorUrl = (
130 DeepLEngine.TranslatorUrls["free"] 121 DeepLEngine.TranslatorUrls["free"]
131 if apiKey.endswith(":fx") 122 if apiKey.endswith(":fx")
132 else DeepLEngine.TranslatorUrls["pro"] 123 else DeepLEngine.TranslatorUrls["pro"]
133 ) 124 )
134 response, ok = requestObject.post(QUrl(translatorUrl), request) 125
126 requestDict = {
127 "text": [text],
128 "source_lang": originalLanguage,
129 "target_lang": translationLanguage,
130 }
131 request = QByteArray(json.dumps(requestDict).encode("utf-8"))
132
133 extraHeaders = [
134 (
135 b"Authorization",
136 b"DeepL-Auth-Key " + QByteArray(apiKey.encode("utf-8")),
137 )
138 ]
139
140 response, ok = requestObject.post(
141 QUrl(translatorUrl), request, dataType="json", extraHeaders=extraHeaders
142 )
135 if ok: 143 if ok:
136 try: 144 try:
137 responseDict = json.loads(response) 145 responseDict = json.loads(response)
138 except ValueError: 146 except ValueError:
139 return self.tr("Invalid response received from DeepL"), False 147 return self.tr("Invalid response received from DeepL"), False

eric ide

mercurial