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(() => { - +
+ + +