| 406 | 406 | lang = extension_settings.translate.target_language; |
| 407 | 407 | } |
| 408 | 408 | |
| 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 | + } |
| 409 | 430 | switch (extension_settings.translate.provider) { |
| 410 | 431 | case 'libre': |
| 411 | 432 | return await translateProviderLibre(text, lang); |