Exclude links to embedded images from translation

ba2b251d6e109e40938c40fbcdf683a6b88619eb

Yaroslav Sivakov <yar3333@gmail.com>

1 files changed, +37 -20Ignore whitespace
public/scripts/extensions/translate/index.js+37 -20
@@ -406,33 +406,50 @@ async function translate(text, lang) {
406 lang = extension_settings.translate.target_language;406 lang = extension_settings.translate.target_language;
407 }407 }
408408
409 switch (extension_settings.translate.provider) {409 // split text by embedded images links
410 case 'libre':410 const chunks = text.split(/!\[.*?]\([^)]*\)/);
411 return await translateProviderLibre(text, lang);411 const links = [ ...text.matchAll(/!\[.*?]\([^)]*\)/g) ];
412 case 'google':412
413 return await chunkedTranslate(text, lang, translateProviderGoogle, 5000);413 let r = "";
414 case 'lingva':414 for (let i = 0; i < chunks.length; i++) {
415 return await chunkedTranslate(text, lang, translateProviderLingva, 5000);415 r += await translateInner(chunks[i], lang);
416 case 'deepl':416 if (i < links.length) r += links[i][0];
417 return await translateProviderDeepl(text, lang);
418 case 'deeplx':
419 return await chunkedTranslate(text, lang, translateProviderDeepLX, 1500);
420 case 'oneringtranslator':
421 return await translateProviderOneRing(text, lang);
422 case 'bing':
423 return await chunkedTranslate(text, lang, translateProviderBing, 1000);
424 case 'yandex':
425 return await translateProviderYandex(text, lang);
426 default:
427 console.error('Unknown translation provider', extension_settings.translate.provider);
428 return text;
429 }417 }
418
419 return r;
430 } catch (error) {420 } catch (error) {
431 console.log(error);421 console.log(error);
432 toastr.error(String(error), 'Failed to translate message');422 toastr.error(String(error), 'Failed to translate message');
433 }423 }
434}424}
435425
426async function translateInner(text, lang) {
427 if (text == '') {
428 return '';
429 }
430 switch (extension_settings.translate.provider) {
431 case 'libre':
432 return await translateProviderLibre(text, lang);
433 case 'google':
434 return await chunkedTranslate(text, lang, translateProviderGoogle, 5000);
435 case 'lingva':
436 return await chunkedTranslate(text, lang, translateProviderLingva, 5000);
437 case 'deepl':
438 return await translateProviderDeepl(text, lang);
439 case 'deeplx':
440 return await chunkedTranslate(text, lang, translateProviderDeepLX, 1500);
441 case 'oneringtranslator':
442 return await translateProviderOneRing(text, lang);
443 case 'bing':
444 return await chunkedTranslate(text, lang, translateProviderBing, 1000);
445 case 'yandex':
446 return await translateProviderYandex(text, lang);
447 default:
448 console.error('Unknown translation provider', extension_settings.translate.provider);
449 return text;
450 }
451}
452
436async function translateOutgoingMessage(messageId) {453async function translateOutgoingMessage(messageId) {
437 const context = getContext();454 const context = getContext();
438 const message = context.chat[messageId];455 const message = context.chat[messageId];