File indexing completed on 2025-12-07 04:08:38
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2018-02-22 0007 * Description : A text translator using web-services - Conversion tables. 0008 * 0009 * SPDX-FileCopyrightText: 2018-2022 by Hennadii Chernyshchyk <genaloner at gmail dot com> 0010 * SPDX-FileCopyrightText: 2021-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0011 * 0012 * SPDX-License-Identifier: GPL-2.0-or-later 0013 * 0014 * ============================================================ */ 0015 0016 #include "donlinetranslator_p.h" 0017 0018 namespace Digikam 0019 { 0020 0021 QString DOnlineTranslator::fromRFC3066(Engine engine, const QString& langCodeRFC3066) 0022 { 0023 QString lg; 0024 0025 switch (engine) 0026 { 0027 case Google: 0028 case LibreTranslate: 0029 { 0030 lg = DOnlineTranslator::Private::s_rfc3066LanguageCodesGoogle[langCodeRFC3066]; 0031 break; 0032 } 0033 0034 case Yandex: 0035 { 0036 lg = DOnlineTranslator::Private::s_rfc3066LanguageCodesYandex[langCodeRFC3066]; 0037 break; 0038 } 0039 0040 case Bing: 0041 { 0042 lg = DOnlineTranslator::Private::s_rfc3066LanguageCodesBing[langCodeRFC3066]; 0043 break; 0044 } 0045 0046 case Lingva: 0047 { 0048 lg = DOnlineTranslator::Private::s_rfc3066LanguageCodesLingva[langCodeRFC3066]; 0049 break; 0050 } 0051 } 0052 0053 if (lg.isEmpty()) 0054 { 0055 lg = DOnlineTranslator::Private::s_rfc3066LanguageCodesGeneric[langCodeRFC3066]; 0056 } 0057 0058 return lg; 0059 } 0060 0061 QStringList DOnlineTranslator::supportedRFC3066(Engine engine) 0062 { 0063 QStringList lst = DOnlineTranslator::Private::s_rfc3066LanguageCodesGeneric.keys(); 0064 0065 switch (engine) 0066 { 0067 case Google: 0068 case LibreTranslate: 0069 { 0070 lst << DOnlineTranslator::Private::s_rfc3066LanguageCodesGoogle.keys(); 0071 break; 0072 } 0073 0074 case Yandex: 0075 { 0076 lst << DOnlineTranslator::Private::s_rfc3066LanguageCodesYandex.keys(); 0077 break; 0078 } 0079 0080 case Bing: 0081 { 0082 lst << DOnlineTranslator::Private::s_rfc3066LanguageCodesBing.keys(); 0083 break; 0084 } 0085 0086 case Lingva: 0087 { 0088 lst << DOnlineTranslator::Private::s_rfc3066LanguageCodesLingva.keys(); 0089 break; 0090 } 0091 } 0092 0093 lst.removeDuplicates(); 0094 0095 return lst; 0096 } 0097 0098 QString DOnlineTranslator::languageName(Language lang) 0099 { 0100 switch (lang) 0101 { 0102 case Auto: 0103 return i18nc("@info: language name", "Automatically detect"); 0104 0105 case Afrikaans: 0106 return i18nc("@info: language name", "Afrikaans"); 0107 0108 case Albanian: 0109 return i18nc("@info: language name", "Albanian"); 0110 0111 case Amharic: 0112 return i18nc("@info: language name", "Amharic"); 0113 0114 case Arabic: 0115 return i18nc("@info: language name", "Arabic"); 0116 0117 case Armenian: 0118 return i18nc("@info: language name", "Armenian"); 0119 0120 case Azerbaijani: 0121 return i18nc("@info: language name", "Azeerbaijani"); 0122 0123 case Basque: 0124 return i18nc("@info: language name", "Basque"); 0125 0126 case Bashkir: 0127 return i18nc("@info: language name", "Bashkir"); 0128 0129 case Belarusian: 0130 return i18nc("@info: language name", "Belarusian"); 0131 0132 case Bengali: 0133 return i18nc("@info: language name", "Bengali"); 0134 0135 case Bosnian: 0136 return i18nc("@info: language name", "Bosnian"); 0137 0138 case Bulgarian: 0139 return i18nc("@info: language name", "Bulgarian"); 0140 0141 case Catalan: 0142 return i18nc("@info: language name", "Catalan"); 0143 0144 case Cantonese: 0145 return i18nc("@info: language name", "Cantonese"); 0146 0147 case Cebuano: 0148 return i18nc("@info: language name", "Cebuano"); 0149 0150 case SimplifiedChinese: 0151 return i18nc("@info: language name", "Chinese (Simplified)"); 0152 0153 case TraditionalChinese: 0154 return i18nc("@info: language name", "Chinese (Traditional)"); 0155 0156 case Corsican: 0157 return i18nc("@info: language name", "Corsican"); 0158 0159 case Croatian: 0160 return i18nc("@info: language name", "Croatian"); 0161 0162 case Czech: 0163 return i18nc("@info: language name", "Czech"); 0164 0165 case Danish: 0166 return i18nc("@info: language name", "Danish"); 0167 0168 case Dutch: 0169 return i18nc("@info: language name", "Dutch"); 0170 0171 case English: 0172 return i18nc("@info: language name", "English"); 0173 0174 case Esperanto: 0175 return i18nc("@info: language name", "Esperanto"); 0176 0177 case Estonian: 0178 return i18nc("@info: language name", "Estonian"); 0179 0180 case Fijian: 0181 return i18nc("@info: language name", "Fijian"); 0182 0183 case Filipino: 0184 return i18nc("@info: language name", "Filipino"); 0185 0186 case Finnish: 0187 return i18nc("@info: language name", "Finnish"); 0188 0189 case French: 0190 return i18nc("@info: language name", "French"); 0191 0192 case Frisian: 0193 return i18nc("@info: language name", "Frisian"); 0194 0195 case Galician: 0196 return i18nc("@info: language name", "Galician"); 0197 0198 case Georgian: 0199 return i18nc("@info: language name", "Georgian"); 0200 0201 case German: 0202 return i18nc("@info: language name", "German"); 0203 0204 case Greek: 0205 return i18nc("@info: language name", "Greek"); 0206 0207 case Gujarati: 0208 return i18nc("@info: language name", "Gujarati"); 0209 0210 case HaitianCreole: 0211 return i18nc("@info: language name", "Haitian Creole"); 0212 0213 case Hausa: 0214 return i18nc("@info: language name", "Hausa"); 0215 0216 case Hawaiian: 0217 return i18nc("@info: language name", "Hawaiian"); 0218 0219 case Hebrew: 0220 return i18nc("@info: language name", "Hebrew"); 0221 0222 case HillMari: 0223 return i18nc("@info: language name", "Hill Mari"); 0224 0225 case Hindi: 0226 return i18nc("@info: language name", "Hindi"); 0227 0228 case Hmong: 0229 return i18nc("@info: language name", "Hmong"); 0230 0231 case Hungarian: 0232 return i18nc("@info: language name", "Hungarian"); 0233 0234 case Icelandic: 0235 return i18nc("@info: language name", "Icelandic"); 0236 0237 case Igbo: 0238 return i18nc("@info: language name", "Igbo"); 0239 0240 case Indonesian: 0241 return i18nc("@info: language name", "Indonesian"); 0242 0243 case Irish: 0244 return i18nc("@info: language name", "Irish"); 0245 0246 case Italian: 0247 return i18nc("@info: language name", "Italian"); 0248 0249 case Japanese: 0250 return i18nc("@info: language name", "Japanese"); 0251 0252 case Javanese: 0253 return i18nc("@info: language name", "Javanese"); 0254 0255 case Kannada: 0256 return i18nc("@info: language name", "Kannada"); 0257 0258 case Kazakh: 0259 return i18nc("@info: language name", "Kazakh"); 0260 0261 case Khmer: 0262 return i18nc("@info: language name", "Khmer"); 0263 0264 case Kinyarwanda: 0265 return i18nc("@info: language name", "Kinyarwanda"); 0266 0267 case Klingon: 0268 return i18nc("@info: language name", "Klingon"); 0269 0270 case KlingonPlqaD: 0271 return i18nc("@info: language name", "Klingon (PlqaD)"); 0272 0273 case Korean: 0274 return i18nc("@info: language name", "Korean"); 0275 0276 case Kurdish: 0277 return i18nc("@info: language name", "Kurdish"); 0278 0279 case Kyrgyz: 0280 return i18nc("@info: language name", "Kyrgyz"); 0281 0282 case Lao: 0283 return i18nc("@info: language name", "Lao"); 0284 0285 case Latin: 0286 return i18nc("@info: language name", "Latin"); 0287 0288 case Latvian: 0289 return i18nc("@info: language name", "Latvian"); 0290 0291 case LevantineArabic: 0292 return i18nc("@info: language name", "Levantine Arabic"); 0293 0294 case Lithuanian: 0295 return i18nc("@info: language name", "Lithuanian"); 0296 0297 case Luxembourgish: 0298 return i18nc("@info: language name", "Luxembourgish"); 0299 0300 case Macedonian: 0301 return i18nc("@info: language name", "Macedonian"); 0302 0303 case Malagasy: 0304 return i18nc("@info: language name", "Malagasy"); 0305 0306 case Malay: 0307 return i18nc("@info: language name", "Malay"); 0308 0309 case Malayalam: 0310 return i18nc("@info: language name", "Malayalam"); 0311 0312 case Maltese: 0313 return i18nc("@info: language name", "Maltese"); 0314 0315 case Maori: 0316 return i18nc("@info: language name", "Maori"); 0317 0318 case Marathi: 0319 return i18nc("@info: language name", "Marathi"); 0320 0321 case Mari: 0322 return i18nc("@info: language name", "Mari"); 0323 0324 case Mongolian: 0325 return i18nc("@info: language name", "Mongolian"); 0326 0327 case Myanmar: 0328 return i18nc("@info: language name", "Myanmar"); 0329 0330 case Nepali: 0331 return i18nc("@info: language name", "Nepali"); 0332 0333 case Norwegian: 0334 return i18nc("@info: language name", "Norwegian"); 0335 0336 case Oriya: 0337 return i18nc("@info: language name", "Oriya"); 0338 0339 case Chichewa: 0340 return i18nc("@info: language name", "Chichewa"); 0341 0342 case Papiamento: 0343 return i18nc("@info: language name", "Papiamento"); 0344 0345 case Pashto: 0346 return i18nc("@info: language name", "Pashto"); 0347 0348 case Persian: 0349 return i18nc("@info: language name", "Persian"); 0350 0351 case Polish: 0352 return i18nc("@info: language name", "Polish"); 0353 0354 case Portuguese: 0355 return i18nc("@info: language name", "Portuguese"); 0356 0357 case Punjabi: 0358 return i18nc("@info: language name", "Punjabi"); 0359 0360 case QueretaroOtomi: 0361 return i18nc("@info: language name", "Queretaro Otomi"); 0362 0363 case Romanian: 0364 return i18nc("@info: language name", "Romanian"); 0365 0366 case Russian: 0367 return i18nc("@info: language name", "Russian"); 0368 0369 case Samoan: 0370 return i18nc("@info: language name", "Samoan"); 0371 0372 case ScotsGaelic: 0373 return i18nc("@info: language name", "Scots Gaelic"); 0374 0375 case SerbianCyrillic: 0376 return i18nc("@info: language name", "Serbian (Cyrillic)"); 0377 0378 case SerbianLatin: 0379 return i18nc("@info: language name", "Serbian (Latin)"); 0380 0381 case Sesotho: 0382 return i18nc("@info: language name", "Sesotho"); 0383 0384 case Shona: 0385 return i18nc("@info: language name", "Shona"); 0386 0387 case Sindhi: 0388 return i18nc("@info: language name", "Sindhi"); 0389 0390 case Sinhala: 0391 return i18nc("@info: language name", "Sinhala"); 0392 0393 case Slovak: 0394 return i18nc("@info: language name", "Slovak"); 0395 0396 case Slovenian: 0397 return i18nc("@info: language name", "Slovenian"); 0398 0399 case Somali: 0400 return i18nc("@info: language name", "Somali"); 0401 0402 case Spanish: 0403 return i18nc("@info: language name", "Spanish"); 0404 0405 case Sundanese: 0406 return i18nc("@info: language name", "Sundanese"); 0407 0408 case Swahili: 0409 return i18nc("@info: language name", "Swahili"); 0410 0411 case Swedish: 0412 return i18nc("@info: language name", "Swedish"); 0413 0414 case Tagalog: 0415 return i18nc("@info: language name", "Tagalog"); 0416 0417 case Tahitian: 0418 return i18nc("@info: language name", "Tahitian"); 0419 0420 case Tajik: 0421 return i18nc("@info: language name", "Tajik"); 0422 0423 case Tamil: 0424 return i18nc("@info: language name", "Tamil"); 0425 0426 case Tatar: 0427 return i18nc("@info: language name", "Tatar"); 0428 0429 case Telugu: 0430 return i18nc("@info: language name", "Telugu"); 0431 0432 case Thai: 0433 return i18nc("@info: language name", "Thai"); 0434 0435 case Tongan: 0436 return i18nc("@info: language name", "Tongan"); 0437 0438 case Turkish: 0439 return i18nc("@info: language name", "Turkish"); 0440 0441 case Turkmen: 0442 return i18nc("@info: language name", "Turkmen"); 0443 0444 case Udmurt: 0445 return i18nc("@info: language name", "Udmurt"); 0446 0447 case Uighur: 0448 return i18nc("@info: language name", "Uighur"); 0449 0450 case Ukrainian: 0451 return i18nc("@info: language name", "Ukrainian"); 0452 0453 case Urdu: 0454 return i18nc("@info: language name", "Urdu"); 0455 0456 case Uzbek: 0457 return i18nc("@info: language name", "Uzbek"); 0458 0459 case Vietnamese: 0460 return i18nc("@info: language name", "Vietnamese"); 0461 0462 case Welsh: 0463 return i18nc("@info: language name", "Welsh"); 0464 0465 case Xhosa: 0466 return i18nc("@info: language name", "Xhosa"); 0467 0468 case Yiddish: 0469 return i18nc("@info: language name", "Yiddish"); 0470 0471 case Yoruba: 0472 return i18nc("@info: language name", "Yoruba"); 0473 0474 case YucatecMaya: 0475 return i18nc("@info: language name", "Yucatec Maya"); 0476 0477 case Zulu: 0478 return i18nc("@info: language name", "Zulu"); 0479 0480 default: 0481 return QString(); 0482 } 0483 } 0484 0485 DOnlineTranslator::Language DOnlineTranslator::language(const QLocale& locale) 0486 { 0487 switch (locale.language()) 0488 { 0489 case QLocale::Afrikaans: 0490 return Afrikaans; 0491 0492 case QLocale::Albanian: 0493 return Albanian; 0494 0495 case QLocale::Amharic: 0496 return Amharic; 0497 0498 case QLocale::Arabic: 0499 return Arabic; 0500 0501 case QLocale::Armenian: 0502 return Armenian; 0503 0504 case QLocale::Azerbaijani: 0505 return Azerbaijani; 0506 0507 case QLocale::Basque: 0508 return Basque; 0509 0510 case QLocale::Belarusian: 0511 return Belarusian; 0512 0513 case QLocale::Bengali: 0514 return Bengali; 0515 0516 case QLocale::Bosnian: 0517 return Bosnian; 0518 0519 case QLocale::Bulgarian: 0520 return Bulgarian; 0521 0522 case QLocale::Catalan: 0523 return Catalan; 0524 0525 case QLocale::Chinese: 0526 return SimplifiedChinese; 0527 0528 case QLocale::LiteraryChinese: 0529 return TraditionalChinese; 0530 0531 case QLocale::Corsican: 0532 return Corsican; 0533 0534 case QLocale::Croatian: 0535 return Croatian; 0536 0537 case QLocale::Czech: 0538 return Czech; 0539 0540 case QLocale::Danish: 0541 return Danish; 0542 0543 case QLocale::Dutch: 0544 return Dutch; 0545 0546 case QLocale::Esperanto: 0547 return Esperanto; 0548 0549 case QLocale::Estonian: 0550 return Estonian; 0551 0552 case QLocale::Finnish: 0553 return Finnish; 0554 0555 case QLocale::French: 0556 return French; 0557 0558 case QLocale::Frisian: 0559 return Frisian; 0560 0561 case QLocale::Galician: 0562 return Galician; 0563 0564 case QLocale::Georgian: 0565 return Georgian; 0566 0567 case QLocale::German: 0568 return German; 0569 0570 case QLocale::Greek: 0571 return Greek; 0572 0573 case QLocale::Gujarati: 0574 return Gujarati; 0575 0576 case QLocale::Haitian: 0577 return HaitianCreole; 0578 0579 case QLocale::Hausa: 0580 return Hausa; 0581 0582 case QLocale::Hawaiian: 0583 return Hawaiian; 0584 0585 case QLocale::Hebrew: 0586 return Hebrew; 0587 0588 case QLocale::Hindi: 0589 return Hindi; 0590 0591 case QLocale::Hungarian: 0592 return Hungarian; 0593 0594 case QLocale::Icelandic: 0595 return Icelandic; 0596 0597 case QLocale::Igbo: 0598 return Igbo; 0599 0600 case QLocale::Indonesian: 0601 return Indonesian; 0602 0603 case QLocale::Irish: 0604 return Irish; 0605 0606 case QLocale::Italian: 0607 return Italian; 0608 0609 case QLocale::Japanese: 0610 return Japanese; 0611 0612 case QLocale::Javanese: 0613 return Javanese; 0614 0615 case QLocale::Kannada: 0616 return Kannada; 0617 0618 case QLocale::Kazakh: 0619 return Kazakh; 0620 0621 case QLocale::Khmer: 0622 return Khmer; 0623 0624 case QLocale::Kinyarwanda: 0625 return Kinyarwanda; 0626 0627 case QLocale::Korean: 0628 return Korean; 0629 0630 case QLocale::Kurdish: 0631 return Kurdish; 0632 0633 case QLocale::Lao: 0634 return Lao; 0635 0636 case QLocale::Latin: 0637 return Latin; 0638 0639 case QLocale::Latvian: 0640 return Latvian; 0641 0642 case QLocale::Lithuanian: 0643 return Lithuanian; 0644 0645 case QLocale::Luxembourgish: 0646 return Luxembourgish; 0647 0648 case QLocale::Macedonian: 0649 return Macedonian; 0650 0651 case QLocale::Malagasy: 0652 return Malagasy; 0653 0654 case QLocale::Malay: 0655 return Malay; 0656 0657 case QLocale::Malayalam: 0658 return Malayalam; 0659 0660 case QLocale::Maltese: 0661 return Maltese; 0662 0663 case QLocale::Maori: 0664 return Maori; 0665 0666 case QLocale::Marathi: 0667 return Marathi; 0668 0669 case QLocale::Mongolian: 0670 return Mongolian; 0671 0672 case QLocale::Nepali: 0673 return Nepali; 0674 0675 case QLocale::NorwegianBokmal: 0676 return Norwegian; 0677 0678 case QLocale::Oriya: 0679 return Oriya; 0680 0681 case QLocale::Pashto: 0682 return Pashto; 0683 0684 case QLocale::Persian: 0685 return Persian; 0686 0687 case QLocale::Polish: 0688 return Polish; 0689 0690 case QLocale::Portuguese: 0691 return Portuguese; 0692 0693 case QLocale::Punjabi: 0694 return Punjabi; 0695 0696 case QLocale::Romanian: 0697 return Romanian; 0698 0699 case QLocale::Russian: 0700 return Russian; 0701 0702 case QLocale::Samoan: 0703 return Samoan; 0704 0705 case QLocale::Gaelic: 0706 return ScotsGaelic; 0707 0708 case QLocale::Serbian: 0709 return SerbianCyrillic; 0710 0711 case QLocale::Shona: 0712 return Shona; 0713 0714 case QLocale::Sindhi: 0715 return Sindhi; 0716 0717 case QLocale::Sinhala: 0718 return Sinhala; 0719 0720 case QLocale::Slovak: 0721 return Slovak; 0722 0723 case QLocale::Slovenian: 0724 return Slovenian; 0725 0726 case QLocale::Somali: 0727 return Somali; 0728 0729 case QLocale::Spanish: 0730 return Spanish; 0731 0732 case QLocale::Sundanese: 0733 return Sundanese; 0734 0735 case QLocale::Swahili: 0736 return Swahili; 0737 0738 case QLocale::Swedish: 0739 return Swedish; 0740 0741 case QLocale::Filipino: 0742 return Filipino; 0743 0744 case QLocale::Tajik: 0745 return Tajik; 0746 0747 case QLocale::Tamil: 0748 return Tamil; 0749 0750 case QLocale::Tatar: 0751 return Tatar; 0752 0753 case QLocale::Telugu: 0754 return Telugu; 0755 0756 case QLocale::Thai: 0757 return Thai; 0758 0759 case QLocale::Turkish: 0760 return Turkish; 0761 0762 case QLocale::Turkmen: 0763 return Turkmen; 0764 0765 case QLocale::Uighur: 0766 return Uighur; 0767 0768 case QLocale::Ukrainian: 0769 return Ukrainian; 0770 0771 case QLocale::Urdu: 0772 return Urdu; 0773 0774 case QLocale::Uzbek: 0775 return Uzbek; 0776 0777 case QLocale::Vietnamese: 0778 return Vietnamese; 0779 0780 case QLocale::Welsh: 0781 return Welsh; 0782 0783 case QLocale::Xhosa: 0784 return Xhosa; 0785 0786 case QLocale::Yiddish: 0787 return Yiddish; 0788 0789 case QLocale::Yoruba: 0790 return Yoruba; 0791 0792 case QLocale::Zulu: 0793 return Zulu; 0794 0795 default: 0796 return English; 0797 } 0798 } 0799 0800 bool DOnlineTranslator::isSupportTranslation(Engine engine, Language lang) 0801 { 0802 bool isSupported = false; 0803 0804 switch (engine) 0805 { 0806 case Google: 0807 case Lingva: // Lingva is a frontend to Google Translate 0808 0809 switch (lang) 0810 { 0811 case NoLanguage: 0812 case Bashkir: 0813 case Cantonese: 0814 case Fijian: 0815 case Filipino: 0816 case Georgian: 0817 case HillMari: 0818 case Klingon: 0819 case KlingonPlqaD: 0820 case LevantineArabic: 0821 case Mari: 0822 case Papiamento: 0823 case QueretaroOtomi: 0824 case SerbianLatin: 0825 case Tahitian: 0826 case Tongan: 0827 case Udmurt: 0828 case YucatecMaya: 0829 isSupported = false; 0830 break; 0831 0832 default: 0833 isSupported = true; 0834 break; 0835 } 0836 0837 break; 0838 0839 case Yandex: 0840 0841 switch (lang) 0842 { 0843 case NoLanguage: 0844 case Cantonese: 0845 case Chichewa: 0846 case Corsican: 0847 case Fijian: 0848 case Filipino: 0849 case Frisian: 0850 case Hausa: 0851 case Hawaiian: 0852 case Igbo: 0853 case Kinyarwanda: 0854 case Klingon: 0855 case KlingonPlqaD: 0856 case Kurdish: 0857 case LevantineArabic: 0858 case Oriya: 0859 case Pashto: 0860 case QueretaroOtomi: 0861 case Samoan: 0862 case SerbianLatin: 0863 case Sesotho: 0864 case Shona: 0865 case Sindhi: 0866 case Somali: 0867 case Tahitian: 0868 case Tongan: 0869 case Turkmen: 0870 case Uighur: 0871 case Yoruba: 0872 case YucatecMaya: 0873 case Zulu: 0874 isSupported = false; 0875 break; 0876 0877 default: 0878 isSupported = true; 0879 break; 0880 } 0881 0882 break; 0883 0884 case Bing: 0885 0886 switch (lang) 0887 { 0888 case NoLanguage: 0889 case Albanian: 0890 case Amharic: 0891 case Armenian: 0892 case Azerbaijani: 0893 case Basque: 0894 case Bashkir: 0895 case Belarusian: 0896 case Cebuano: 0897 case Corsican: 0898 case Esperanto: 0899 case Frisian: 0900 case Galician: 0901 case Georgian: 0902 case Gujarati: 0903 case Hausa: 0904 case Hawaiian: 0905 case HillMari: 0906 case Igbo: 0907 case Irish: 0908 case Javanese: 0909 case Kannada: 0910 case Kazakh: 0911 case Khmer: 0912 case Kinyarwanda: 0913 case Kurdish: 0914 case Kyrgyz: 0915 case Lao: 0916 case Latin: 0917 case Luxembourgish: 0918 case Macedonian: 0919 case Malayalam: 0920 case Maori: 0921 case Marathi: 0922 case Mari: 0923 case Mongolian: 0924 case Myanmar: 0925 case Nepali: 0926 case Oriya: 0927 case Chichewa: 0928 case Papiamento: 0929 case Pashto: 0930 case Punjabi: 0931 case ScotsGaelic: 0932 case Sesotho: 0933 case Shona: 0934 case Sindhi: 0935 case Sinhala: 0936 case Somali: 0937 case Sundanese: 0938 case Tagalog: 0939 case Tajik: 0940 case Tatar: 0941 case Turkmen: 0942 case Uighur: 0943 case Udmurt: 0944 case Uzbek: 0945 case Xhosa: 0946 case Yiddish: 0947 case Yoruba: 0948 case Zulu: 0949 isSupported = false; 0950 break; 0951 0952 default: 0953 isSupported = true; 0954 break; 0955 } 0956 0957 break; 0958 0959 case LibreTranslate: 0960 0961 switch (lang) 0962 { 0963 case NoLanguage: 0964 case Afrikaans: 0965 case Albanian: 0966 case Amharic: 0967 case Armenian: 0968 case Azerbaijani: 0969 case Bashkir: 0970 case Basque: 0971 case Belarusian: 0972 case Bengali: 0973 case Bosnian: 0974 case Bulgarian: 0975 case Cantonese: 0976 case Catalan: 0977 case Cebuano: 0978 case Chichewa: 0979 case Corsican: 0980 case Croatian: 0981 case Czech: 0982 case Danish: 0983 case Dutch: 0984 case Esperanto: 0985 case Estonian: 0986 case Fijian: 0987 case Filipino: 0988 case Finnish: 0989 case Frisian: 0990 case Galician: 0991 case Georgian: 0992 case Greek: 0993 case Gujarati: 0994 case HaitianCreole: 0995 case Hausa: 0996 case Hawaiian: 0997 case Hebrew: 0998 case HillMari: 0999 case Hmong: 1000 case Hungarian: 1001 case Icelandic: 1002 case Igbo: 1003 case Javanese: 1004 case Kannada: 1005 case Kazakh: 1006 case Khmer: 1007 case Kinyarwanda: 1008 case Klingon: 1009 case KlingonPlqaD: 1010 case Kurdish: 1011 case Kyrgyz: 1012 case Lao: 1013 case Latin: 1014 case Latvian: 1015 case LevantineArabic: 1016 case Lithuanian: 1017 case Luxembourgish: 1018 case Macedonian: 1019 case Malagasy: 1020 case Malay: 1021 case Malayalam: 1022 case Maltese: 1023 case Maori: 1024 case Marathi: 1025 case Mari: 1026 case Mongolian: 1027 case Myanmar: 1028 case Nepali: 1029 case Norwegian: 1030 case Oriya: 1031 case Papiamento: 1032 case Pashto: 1033 case Persian: 1034 case Punjabi: 1035 case QueretaroOtomi: 1036 case Romanian: 1037 case Samoan: 1038 case ScotsGaelic: 1039 case SerbianCyrillic: 1040 case SerbianLatin: 1041 case Sesotho: 1042 case Shona: 1043 case SimplifiedChinese: 1044 case Sindhi: 1045 case Sinhala: 1046 case Slovak: 1047 case Slovenian: 1048 case Somali: 1049 case Sundanese: 1050 case Swahili: 1051 case Swedish: 1052 case Tagalog: 1053 case Tahitian: 1054 case Tajik: 1055 case Tamil: 1056 case Tatar: 1057 case Telugu: 1058 case Thai: 1059 case Tongan: 1060 case Turkmen: 1061 case Udmurt: 1062 case Uighur: 1063 case Ukrainian: 1064 case Urdu: 1065 case Uzbek: 1066 case Welsh: 1067 case Xhosa: 1068 case Yiddish: 1069 case Yoruba: 1070 case YucatecMaya: 1071 case Zulu: 1072 isSupported = false; 1073 break; 1074 1075 default: 1076 isSupported = true; 1077 break; 1078 } 1079 1080 break; 1081 } 1082 1083 return isSupported; 1084 } 1085 1086 bool DOnlineTranslator::isSupportTranslit(Engine engine, Language lang) 1087 { 1088 switch (engine) 1089 { 1090 case Google: 1091 isSupportTranslation(Google, lang); // Google supports transliteration for all supported languages 1092 break; 1093 1094 case Yandex: 1095 1096 switch (lang) 1097 { 1098 case Amharic: 1099 case Armenian: 1100 case Bengali: 1101 case SimplifiedChinese: 1102 case Georgian: 1103 case Greek: 1104 case Gujarati: 1105 case Hebrew: 1106 case Hindi: 1107 case Japanese: 1108 case Kannada: 1109 case Korean: 1110 case Malayalam: 1111 case Marathi: 1112 case Nepali: 1113 case Punjabi: 1114 case Russian: 1115 case Sinhala: 1116 case Tamil: 1117 case Telugu: 1118 case Thai: 1119 case Yiddish: 1120 return true; 1121 default: 1122 return false; 1123 } 1124 1125 case Bing: 1126 1127 switch (lang) 1128 { 1129 case Arabic: 1130 case Bengali: 1131 case Gujarati: 1132 case Hebrew: 1133 case Hindi: 1134 case Japanese: 1135 case Kannada: 1136 case Malayalam: 1137 case Marathi: 1138 case Punjabi: 1139 case SerbianCyrillic: 1140 case SerbianLatin: 1141 case Tamil: 1142 case Telugu: 1143 case Thai: 1144 case SimplifiedChinese: 1145 case TraditionalChinese: 1146 return true; 1147 default: 1148 return false; 1149 } 1150 1151 case LibreTranslate: // LibreTranslate doesn't support translit 1152 case Lingva: // Although Lingvo is a frontend to Google Translate, it doesn't support transliteration 1153 return false; 1154 } 1155 1156 return false; 1157 } 1158 1159 bool DOnlineTranslator::isSupportDictionary(Engine engine, Language sourceLang, Language translationLang) 1160 { 1161 switch (engine) 1162 { 1163 case Google: 1164 // Google supports dictionary for all supported languages 1165 return isSupportTranslation(Google, sourceLang) && isSupportTranslation(Google, translationLang); 1166 1167 case Yandex: 1168 1169 switch (sourceLang) 1170 { 1171 case Belarusian: 1172 1173 switch (translationLang) 1174 { 1175 case Belarusian: 1176 case Russian: 1177 return true; 1178 default: 1179 return false; 1180 } 1181 1182 case Bulgarian: 1183 1184 switch (translationLang) 1185 { 1186 case Russian: 1187 return true; 1188 default: 1189 return false; 1190 } 1191 1192 case Czech: 1193 case Danish: 1194 case Dutch: 1195 case Estonian: 1196 case Greek: 1197 case Latvian: 1198 case Norwegian: 1199 case Portuguese: 1200 case Slovak: 1201 case Swedish: 1202 1203 switch (translationLang) 1204 { 1205 case English: 1206 case Russian: 1207 return true; 1208 default: 1209 return false; 1210 } 1211 1212 case German: 1213 1214 switch (translationLang) 1215 { 1216 case German: 1217 case English: 1218 case Russian: 1219 case Turkish: 1220 return true; 1221 default: 1222 return false; 1223 } 1224 1225 case English: 1226 1227 switch (translationLang) 1228 { 1229 case Czech: 1230 case Danish: 1231 case German: 1232 case Greek: 1233 case English: 1234 case Spanish: 1235 case Estonian: 1236 case Finnish: 1237 case French: 1238 case Italian: 1239 case Lithuanian: 1240 case Latvian: 1241 case Dutch: 1242 case Norwegian: 1243 case Portuguese: 1244 case Russian: 1245 case Slovak: 1246 case Swedish: 1247 case Turkish: 1248 case Ukrainian: 1249 return true; 1250 default: 1251 return false; 1252 } 1253 1254 case Spanish: 1255 1256 switch (translationLang) 1257 { 1258 case English: 1259 case Spanish: 1260 case Russian: 1261 return true; 1262 default: 1263 return false; 1264 } 1265 1266 case Finnish: 1267 1268 switch (translationLang) 1269 { 1270 case English: 1271 case Russian: 1272 case Finnish: 1273 return true; 1274 default: 1275 return false; 1276 } 1277 case French: 1278 1279 switch (translationLang) 1280 { 1281 case French: 1282 case English: 1283 case Russian: 1284 return true; 1285 default: 1286 return false; 1287 } 1288 1289 case Hungarian: 1290 1291 switch (translationLang) 1292 { 1293 case Hungarian: 1294 case Russian: 1295 return true; 1296 default: 1297 return false; 1298 } 1299 1300 case Italian: 1301 1302 switch (translationLang) 1303 { 1304 case English: 1305 case Italian: 1306 case Russian: 1307 return true; 1308 default: 1309 return false; 1310 } 1311 1312 case Lithuanian: 1313 switch (translationLang) 1314 { 1315 case English: 1316 case Lithuanian: 1317 case Russian: 1318 return true; 1319 default: 1320 return false; 1321 } 1322 1323 case Mari: 1324 case HillMari: 1325 case Polish: 1326 case Tatar: 1327 1328 switch (translationLang) 1329 { 1330 case Russian: 1331 return true; 1332 default: 1333 return false; 1334 } 1335 1336 case Russian: 1337 1338 switch (translationLang) 1339 { 1340 case Belarusian: 1341 case Bulgarian: 1342 case Czech: 1343 case Danish: 1344 case German: 1345 case Greek: 1346 case English: 1347 case Spanish: 1348 case Estonian: 1349 case Finnish: 1350 case French: 1351 case Italian: 1352 case Lithuanian: 1353 case Latvian: 1354 case Mari: 1355 case HillMari: 1356 case Dutch: 1357 case Norwegian: 1358 case Portuguese: 1359 case Russian: 1360 case Slovak: 1361 case Swedish: 1362 case Turkish: 1363 case Tatar: 1364 case Ukrainian: 1365 return true; 1366 default: 1367 return false; 1368 } 1369 1370 case Turkish: 1371 1372 switch (translationLang) 1373 { 1374 case German: 1375 case English: 1376 case Russian: 1377 return true; 1378 default: 1379 return false; 1380 } 1381 1382 case Ukrainian: 1383 1384 switch (translationLang) 1385 { 1386 case English: 1387 case Russian: 1388 case Ukrainian: 1389 return true; 1390 default: 1391 return false; 1392 } 1393 1394 default: 1395 return false; 1396 } 1397 1398 case Bing: 1399 1400 // Bing support dictionary only to or from English 1401 1402 Language secondLang; 1403 1404 if (sourceLang == English) 1405 secondLang = translationLang; 1406 else if (translationLang == English) 1407 secondLang = sourceLang; 1408 else 1409 return false; 1410 1411 switch (secondLang) 1412 { 1413 case Afrikaans: 1414 case Arabic: 1415 case Bengali: 1416 case Bosnian: 1417 case Bulgarian: 1418 case Catalan: 1419 case SimplifiedChinese: 1420 case Croatian: 1421 case Czech: 1422 case Danish: 1423 case Dutch: 1424 case Estonian: 1425 case Finnish: 1426 case French: 1427 case German: 1428 case Greek: 1429 case HaitianCreole: 1430 case Hebrew: 1431 case Hindi: 1432 case Hmong: 1433 case Hungarian: 1434 case Icelandic: 1435 case Indonesian: 1436 case Italian: 1437 case Japanese: 1438 case Swahili: 1439 case Klingon: 1440 case Korean: 1441 case Latvian: 1442 case Lithuanian: 1443 case Malay: 1444 case Maltese: 1445 case Norwegian: 1446 case Persian: 1447 case Polish: 1448 case Portuguese: 1449 case Romanian: 1450 case Russian: 1451 case SerbianLatin: 1452 case Slovak: 1453 case Slovenian: 1454 case Spanish: 1455 case Swedish: 1456 case Tamil: 1457 case Thai: 1458 case Turkish: 1459 case Ukrainian: 1460 case Urdu: 1461 case Vietnamese: 1462 case Welsh: 1463 return true; 1464 default: 1465 return false; 1466 } 1467 1468 case LibreTranslate: // LibreTranslate doesn't support dictinaries 1469 case Lingva: // Although Lingvo is a frontend to Google Translate, it doesn't support dictionaries 1470 return false; 1471 } 1472 1473 return false; 1474 } 1475 1476 } // namespace Digikam