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