diff --git a/public/scripts/extensions/translate/index.js b/public/scripts/extensions/translate/index.js
index 4868c3154..bb8b1ddb7 100644
--- a/public/scripts/extensions/translate/index.js
+++ b/public/scripts/extensions/translate/index.js
@@ -9,6 +9,7 @@ import {
updateMessageBlock,
} from "../../../script.js";
import { extension_settings, getContext } from "../../extensions.js";
+import { secret_state, writeSecret } from "../../secrets.js";
const autoModeOptions = {
NONE: 'none',
@@ -134,6 +135,14 @@ const languageCodes = {
'Zulu': 'zu',
};
+const KEY_REQUIRED = ['deepl'];
+
+function showKeyButton() {
+ const providerRequiresKey = KEY_REQUIRED.includes(extension_settings.translate.provider);
+ $("#translate_key_button").toggle(providerRequiresKey);
+ $("#translate_key_button").toggleClass('success', Boolean(secret_state[extension_settings.translate.provider]));
+}
+
function loadSettings() {
for (const key in defaultSettings) {
if (!extension_settings.translate.hasOwnProperty(key)) {
@@ -144,6 +153,7 @@ function loadSettings() {
$(`#translation_provider option[value="${extension_settings.translate.provider}"]`).attr('selected', true);
$(`#translation_target_language option[value="${extension_settings.translate.target_language}"]`).attr('selected', true);
$(`#translation_auto_mode option[value="${extension_settings.translate.auto_mode}"]`).attr('selected', true);
+ showKeyButton();
}
async function translateImpersonate(text) {
@@ -186,18 +196,39 @@ async function translateProviderGoogle(text, lang) {
throw new Error(response.statusText);
}
+async function translateProviderDeepl(text, lang) {
+ if (!secret_state.deepl) {
+ throw new Error('No DeepL API key');
+ }
+
+ const response = await fetch('/deepl_translate', {
+ method: 'POST',
+ headers: getRequestHeaders(),
+ body: JSON.stringify({ text: text, lang: lang }),
+ });
+
+ if (response.ok) {
+ const result = await response.text();
+ return result;
+ }
+
+ throw new Error(response.statusText);
+}
+
async function translate(text, lang) {
try {
switch (extension_settings.translate.provider) {
case 'google':
return await translateProviderGoogle(text, lang);
+ case 'deepl':
+ return await translateProviderDeepl(text, lang);
default:
console.error('Unknown translation provider', extension_settings.translate.provider);
return text;
}
} catch (error) {
console.log(error);
- toastr.error('Failed to translate message');
+ toastr.error(String(error), 'Failed to translate message');
}
}
@@ -331,9 +362,13 @@ jQuery(() => {
-