Exclude links to embedded images from translation

ba2b251d6e109e40938c40fbcdf683a6b88619eb

Yaroslav Sivakov <yar3333@gmail.com>

1 files changed, +21 -4Showing whitespace changes
public/scripts/extensions/translate/index.js+21 -4
@@ -406,6 +406,27 @@ async function translate(text, lang) {
406406 lang = extension_settings.translate.target_language;
407407 }
408408
409+ // split text by embedded images links
410+ const chunks = text.split(/!\[.*?]\([^)]*\)/);
411+ const links = [ ...text.matchAll(/!\[.*?]\([^)]*\)/g) ];
412+
413+ let r = "";
414+ for (let i = 0; i < chunks.length; i++) {
415+ r += await translateInner(chunks[i], lang);
416+ if (i < links.length) r += links[i][0];
417+ }
418+
419+ return r;
420+ } catch (error) {
421+ console.log(error);
422+ toastr.error(String(error), 'Failed to translate message');
423+ }
424+}
425+
426+async function translateInner(text, lang) {
427+ if (text == '') {
428+ return '';
429+ }
409430 switch (extension_settings.translate.provider) {
410431 case 'libre':
411432 return await translateProviderLibre(text, lang);
@@ -427,10 +448,6 @@ async function translate(text, lang) {
427448 console.error('Unknown translation provider', extension_settings.translate.provider);
428449 return text;
429450 }
430- } catch (error) {
431- console.log(error);
432- toastr.error(String(error), 'Failed to translate message');
433- }
434451}
435452
436453async function translateOutgoingMessage(messageId) {