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 |
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 |