| 406 | lang = extension_settings.translate.target_language; | 406 | lang = extension_settings.translate.target_language; |
| 407 | } | 407 | } |
| 408 | | 408 | |
| 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 | } |
| 435 | | 425 | |
| | 426 | async 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 | |
| 436 | async function translateOutgoingMessage(messageId) { | 453 | async function translateOutgoingMessage(messageId) { |
| 437 | const context = getContext(); | 454 | const context = getContext(); |
| 438 | const message = context.chat[messageId]; | 455 | const message = context.chat[messageId]; |