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 - Private members.
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 const QMap<DOnlineTranslator::Language, QString> DOnlineTranslator::Private::s_genericLanguageCodes =
0022 {
0023     { DOnlineTranslator::Auto,                 QStringLiteral("auto")          },
0024     { DOnlineTranslator::Afrikaans,            QStringLiteral("af")            },
0025     { DOnlineTranslator::Albanian,             QStringLiteral("sq")            },
0026     { DOnlineTranslator::Amharic,              QStringLiteral("am")            },
0027     { DOnlineTranslator::Arabic,               QStringLiteral("ar")            },
0028     { DOnlineTranslator::Armenian,             QStringLiteral("hy")            },
0029     { DOnlineTranslator::Azerbaijani,          QStringLiteral("az")            },
0030     { DOnlineTranslator::Bashkir,              QStringLiteral("ba")            },
0031     { DOnlineTranslator::Basque,               QStringLiteral("eu")            },
0032     { DOnlineTranslator::Belarusian,           QStringLiteral("be")            },
0033     { DOnlineTranslator::Bengali,              QStringLiteral("bn")            },
0034     { DOnlineTranslator::Bosnian,              QStringLiteral("bs")            },
0035     { DOnlineTranslator::Bulgarian,            QStringLiteral("bg")            },
0036     { DOnlineTranslator::Cantonese,            QStringLiteral("yue")           },
0037     { DOnlineTranslator::Catalan,              QStringLiteral("ca")            },
0038     { DOnlineTranslator::Cebuano,              QStringLiteral("ceb")           },
0039     { DOnlineTranslator::Chichewa,             QStringLiteral("ny")            },
0040     { DOnlineTranslator::Corsican,             QStringLiteral("co")            },
0041     { DOnlineTranslator::Croatian,             QStringLiteral("hr")            },
0042     { DOnlineTranslator::Czech,                QStringLiteral("cs")            },
0043     { DOnlineTranslator::Danish,               QStringLiteral("da")            },
0044     { DOnlineTranslator::Dutch,                QStringLiteral("nl")            },
0045     { DOnlineTranslator::English,              QStringLiteral("en")            },
0046     { DOnlineTranslator::Esperanto,            QStringLiteral("eo")            },
0047     { DOnlineTranslator::Estonian,             QStringLiteral("et")            },
0048     { DOnlineTranslator::Fijian,               QStringLiteral("fj")            },
0049     { DOnlineTranslator::Filipino,             QStringLiteral("fil")           },
0050     { DOnlineTranslator::Finnish,              QStringLiteral("fi")            },
0051     { DOnlineTranslator::French,               QStringLiteral("fr")            },
0052     { DOnlineTranslator::Frisian,              QStringLiteral("fy")            },
0053     { DOnlineTranslator::Galician,             QStringLiteral("gl")            },
0054     { DOnlineTranslator::Georgian,             QStringLiteral("ka")            },
0055     { DOnlineTranslator::German,               QStringLiteral("de")            },
0056     { DOnlineTranslator::Greek,                QStringLiteral("el")            },
0057     { DOnlineTranslator::Gujarati,             QStringLiteral("gu")            },
0058     { DOnlineTranslator::HaitianCreole,        QStringLiteral("ht")            },
0059     { DOnlineTranslator::Hausa,                QStringLiteral("ha")            },
0060     { DOnlineTranslator::Hawaiian,             QStringLiteral("haw")           },
0061     { DOnlineTranslator::Hebrew,               QStringLiteral("he")            },
0062     { DOnlineTranslator::HillMari,             QStringLiteral("mrj")           },
0063     { DOnlineTranslator::Hindi,                QStringLiteral("hi")            },
0064     { DOnlineTranslator::Hmong,                QStringLiteral("hmn")           },
0065     { DOnlineTranslator::Hungarian,            QStringLiteral("hu")            },
0066     { DOnlineTranslator::Icelandic,            QStringLiteral("is")            },
0067     { DOnlineTranslator::Igbo,                 QStringLiteral("ig")            },
0068     { DOnlineTranslator::Indonesian,           QStringLiteral("id")            },
0069     { DOnlineTranslator::Irish,                QStringLiteral("ga")            },
0070     { DOnlineTranslator::Italian,              QStringLiteral("it")            },
0071     { DOnlineTranslator::Japanese,             QStringLiteral("ja")            },
0072     { DOnlineTranslator::Javanese,             QStringLiteral("jw")            },
0073     { DOnlineTranslator::Kannada,              QStringLiteral("kn")            },
0074     { DOnlineTranslator::Kazakh,               QStringLiteral("kk")            },
0075     { DOnlineTranslator::Khmer,                QStringLiteral("km")            },
0076     { DOnlineTranslator::Kinyarwanda,          QStringLiteral("rw")            },
0077     { DOnlineTranslator::Klingon,              QStringLiteral("tlh")           },
0078     { DOnlineTranslator::KlingonPlqaD,         QStringLiteral("tlh-Qaak")      },
0079     { DOnlineTranslator::Korean,               QStringLiteral("ko")            },
0080     { DOnlineTranslator::Kurdish,              QStringLiteral("ku")            },
0081     { DOnlineTranslator::Kyrgyz,               QStringLiteral("ky")            },
0082     { DOnlineTranslator::Lao,                  QStringLiteral("lo")            },
0083     { DOnlineTranslator::Latin,                QStringLiteral("la")            },
0084     { DOnlineTranslator::Latvian,              QStringLiteral("lv")            },
0085     { DOnlineTranslator::LevantineArabic,      QStringLiteral("apc")           },
0086     { DOnlineTranslator::Lithuanian,           QStringLiteral("lt")            },
0087     { DOnlineTranslator::Luxembourgish,        QStringLiteral("lb")            },
0088     { DOnlineTranslator::Macedonian,           QStringLiteral("mk")            },
0089     { DOnlineTranslator::Malagasy,             QStringLiteral("mg")            },
0090     { DOnlineTranslator::Malay,                QStringLiteral("ms")            },
0091     { DOnlineTranslator::Malayalam,            QStringLiteral("ml")            },
0092     { DOnlineTranslator::Maltese,              QStringLiteral("mt")            },
0093     { DOnlineTranslator::Maori,                QStringLiteral("mi")            },
0094     { DOnlineTranslator::Marathi,              QStringLiteral("mr")            },
0095     { DOnlineTranslator::Mari,                 QStringLiteral("mhr")           },
0096     { DOnlineTranslator::Mongolian,            QStringLiteral("mn")            },
0097     { DOnlineTranslator::Myanmar,              QStringLiteral("my")            },
0098     { DOnlineTranslator::Nepali,               QStringLiteral("ne")            },
0099     { DOnlineTranslator::Norwegian,            QStringLiteral("no")            },
0100     { DOnlineTranslator::Oriya,                QStringLiteral("or")            },
0101     { DOnlineTranslator::Papiamento,           QStringLiteral("pap")           },
0102     { DOnlineTranslator::Pashto,               QStringLiteral("ps")            },
0103     { DOnlineTranslator::Persian,              QStringLiteral("fa")            },
0104     { DOnlineTranslator::Polish,               QStringLiteral("pl")            },
0105     { DOnlineTranslator::Portuguese,           QStringLiteral("pt")            },
0106     { DOnlineTranslator::Punjabi,              QStringLiteral("pa")            },
0107     { DOnlineTranslator::QueretaroOtomi,       QStringLiteral("otq")           },
0108     { DOnlineTranslator::Romanian,             QStringLiteral("ro")            },
0109     { DOnlineTranslator::Russian,              QStringLiteral("ru")            },
0110     { DOnlineTranslator::Samoan,               QStringLiteral("sm")            },
0111     { DOnlineTranslator::ScotsGaelic,          QStringLiteral("gd")            },
0112     { DOnlineTranslator::SerbianCyrillic,      QStringLiteral("sr")            },
0113     { DOnlineTranslator::SerbianLatin,         QStringLiteral("sr-Latin")      },
0114     { DOnlineTranslator::Sesotho,              QStringLiteral("st")            },
0115     { DOnlineTranslator::Shona,                QStringLiteral("sn")            },
0116     { DOnlineTranslator::SimplifiedChinese,    QStringLiteral("zh-CN")         },
0117     { DOnlineTranslator::Sindhi,               QStringLiteral("sd")            },
0118     { DOnlineTranslator::Sinhala,              QStringLiteral("si")            },
0119     { DOnlineTranslator::Slovak,               QStringLiteral("sk")            },
0120     { DOnlineTranslator::Slovenian,            QStringLiteral("sl")            },
0121     { DOnlineTranslator::Somali,               QStringLiteral("so")            },
0122     { DOnlineTranslator::Spanish,              QStringLiteral("es")            },
0123     { DOnlineTranslator::Sundanese,            QStringLiteral("su")            },
0124     { DOnlineTranslator::Swahili,              QStringLiteral("sw")            },
0125     { DOnlineTranslator::Swedish,              QStringLiteral("sv")            },
0126     { DOnlineTranslator::Tagalog,              QStringLiteral("tl")            },
0127     { DOnlineTranslator::Tahitian,             QStringLiteral("ty")            },
0128     { DOnlineTranslator::Tajik,                QStringLiteral("tg")            },
0129     { DOnlineTranslator::Tamil,                QStringLiteral("ta")            },
0130     { DOnlineTranslator::Tatar,                QStringLiteral("tt")            },
0131     { DOnlineTranslator::Telugu,               QStringLiteral("te")            },
0132     { DOnlineTranslator::Thai,                 QStringLiteral("th")            },
0133     { DOnlineTranslator::Tongan,               QStringLiteral("to")            },
0134     { DOnlineTranslator::TraditionalChinese,   QStringLiteral("zh-TW")         },
0135     { DOnlineTranslator::Turkish,              QStringLiteral("tr")            },
0136     { DOnlineTranslator::Turkmen,              QStringLiteral("tk")            },
0137     { DOnlineTranslator::Udmurt,               QStringLiteral("udm")           },
0138     { DOnlineTranslator::Uighur,               QStringLiteral("ug")            },
0139     { DOnlineTranslator::Ukrainian,            QStringLiteral("uk")            },
0140     { DOnlineTranslator::Urdu,                 QStringLiteral("ur")            },
0141     { DOnlineTranslator::Uzbek,                QStringLiteral("uz")            },
0142     { DOnlineTranslator::Vietnamese,           QStringLiteral("vi")            },
0143     { DOnlineTranslator::Welsh,                QStringLiteral("cy")            },
0144     { DOnlineTranslator::Xhosa,                QStringLiteral("xh")            },
0145     { DOnlineTranslator::Yiddish,              QStringLiteral("yi")            },
0146     { DOnlineTranslator::Yoruba,               QStringLiteral("yo")            },
0147     { DOnlineTranslator::YucatecMaya,          QStringLiteral("yua")           },
0148     { DOnlineTranslator::Zulu,                 QStringLiteral("zu")            }
0149 };
0150 
0151 const QMap<DOnlineTranslator::Language, QString> DOnlineTranslator::Private::s_googleLanguageCodes =
0152 {
0153     { DOnlineTranslator::Hebrew,               QStringLiteral("iw")            }
0154 };
0155 
0156 const QMap<DOnlineTranslator::Language, QString> DOnlineTranslator::Private::s_yandexLanguageCodes =
0157 {
0158     { DOnlineTranslator::SimplifiedChinese,    QStringLiteral("zn")            },
0159     { DOnlineTranslator::Javanese,             QStringLiteral("jv")            }
0160 };
0161 
0162 const QMap<DOnlineTranslator::Language, QString> DOnlineTranslator::Private::s_bingLanguageCodes =
0163 {
0164     { DOnlineTranslator::Auto,                 QStringLiteral("auto-detect")   },
0165     { DOnlineTranslator::Bosnian,              QStringLiteral("bs-Latn")       },
0166     { DOnlineTranslator::SerbianCyrillic,      QStringLiteral("sr-Cyrl")       },
0167     { DOnlineTranslator::SimplifiedChinese,    QStringLiteral("zh-Hans")       },
0168     { DOnlineTranslator::TraditionalChinese,   QStringLiteral("zh-Hant")       },
0169     { DOnlineTranslator::Hmong,                QStringLiteral("mww")           }
0170 };
0171 
0172 const QMap<DOnlineTranslator::Language, QString> DOnlineTranslator::Private::s_lingvaLanguageCodes =
0173 {
0174     { DOnlineTranslator::SimplifiedChinese,    QStringLiteral("zh")            },
0175     { DOnlineTranslator::TraditionalChinese,   QStringLiteral("zh_HANT")       }
0176 };
0177 
0178 // --------------------------------------------------------------------------------------------
0179 
0180 /*
0181  * NOTE: these lists of RFC3066 conversion map are mostly usee in AltLangStrEdit class.
0182  *       Any changes here must be also backported to the list used by AltLangStrEdit class.
0183  */
0184 
0185 const QMap<QString, QString> DOnlineTranslator::Private::s_rfc3066LanguageCodesGeneric =
0186 {
0187     { QLatin1String("af-ZA"),  QLatin1String("af")       },
0188     { QLatin1String("am-ET"),  QLatin1String("am")       },
0189     { QLatin1String("apc-TR"), QLatin1String("apc")      },
0190     { QLatin1String("ar-AE"),  QLatin1String("ar")       },
0191     { QLatin1String("ar-BH"),  QLatin1String("ar")       },
0192     { QLatin1String("ar-DZ"),  QLatin1String("ar")       },
0193     { QLatin1String("ar-EG"),  QLatin1String("ar")       },
0194     { QLatin1String("ar-IL"),  QLatin1String("ar")       },
0195     { QLatin1String("ar-IQ"),  QLatin1String("ar")       },
0196     { QLatin1String("ar-JO"),  QLatin1String("ar")       },
0197     { QLatin1String("ar-KW"),  QLatin1String("ar")       },
0198     { QLatin1String("ar-LB"),  QLatin1String("ar")       },
0199     { QLatin1String("ar-LY"),  QLatin1String("ar")       },
0200     { QLatin1String("ar-MA"),  QLatin1String("ar")       },
0201     { QLatin1String("ar-MR"),  QLatin1String("ar")       },
0202     { QLatin1String("ar-OM"),  QLatin1String("ar")       },
0203     { QLatin1String("ar-PS"),  QLatin1String("ar")       },
0204     { QLatin1String("ar-QA"),  QLatin1String("ar")       },
0205     { QLatin1String("ar-SA"),  QLatin1String("ar")       },
0206     { QLatin1String("ar-SD"),  QLatin1String("ar")       },
0207     { QLatin1String("ar-SO"),  QLatin1String("ar")       },
0208     { QLatin1String("ar-SY"),  QLatin1String("ar")       },
0209     { QLatin1String("ar-TD"),  QLatin1String("ar")       },
0210     { QLatin1String("ar-TN"),  QLatin1String("ar")       },
0211     { QLatin1String("ar-YE"),  QLatin1String("ar")       },
0212 //     { QLatin1String("as-IN"),  QLatin1String("")         },
0213     { QLatin1String("az-AZ"),  QLatin1String("az")       },
0214     { QLatin1String("ba-RU"),  QLatin1String("ba")       },
0215     { QLatin1String("be-BY"),  QLatin1String("be")       },
0216     { QLatin1String("bn-BD"),  QLatin1String("bn")       },
0217     { QLatin1String("bn-IN"),  QLatin1String("bn")       },
0218     { QLatin1String("bn-SG"),  QLatin1String("bn")       },
0219 //     { QLatin1String("bo-BT"),  QLatin1String("")         },
0220 //     { QLatin1String("bo-CN"),  QLatin1String("")         },
0221     { QLatin1String("bs-BA"),  QLatin1String("bs")       },
0222     { QLatin1String("bg-BG"),  QLatin1String("bg")       },
0223 //     { QLatin1String("br-FR"),  QLatin1String("")         },
0224     { QLatin1String("ca-ES"),  QLatin1String("ca")       },
0225     { QLatin1String("ca-AD"),  QLatin1String("ca")       },
0226     { QLatin1String("ca-FR"),  QLatin1String("ca")       },
0227     { QLatin1String("ceb-PH"), QLatin1String("ceb")      },
0228 //     { QLatin1String("ch-GU"),  QLatin1String("")         },
0229 //     { QLatin1String("ch-MP"),  QLatin1String("")         },
0230     { QLatin1String("co-FR"),  QLatin1String("co")       },
0231     { QLatin1String("cs-CZ"),  QLatin1String("cs")       },
0232     { QLatin1String("cy-GB"),  QLatin1String("cy")       },
0233     { QLatin1String("da-DK"),  QLatin1String("da")       },
0234     { QLatin1String("da-GL"),  QLatin1String("da")       },
0235     { QLatin1String("de-DE"),  QLatin1String("de")       },
0236     { QLatin1String("de-DK"),  QLatin1String("de")       },
0237     { QLatin1String("de-LI"),  QLatin1String("de")       },
0238     { QLatin1String("de-AT"),  QLatin1String("de")       },
0239     { QLatin1String("de-LU"),  QLatin1String("de")       },
0240     { QLatin1String("de-CH"),  QLatin1String("de")       },
0241     { QLatin1String("el-CY"),  QLatin1String("el")       },
0242     { QLatin1String("el-GR"),  QLatin1String("el")       },
0243     { QLatin1String("en-AG"),  QLatin1String("en")       },
0244     { QLatin1String("en-AI"),  QLatin1String("en")       },
0245     { QLatin1String("en-AS"),  QLatin1String("en")       },
0246     { QLatin1String("en-AU"),  QLatin1String("en")       },
0247     { QLatin1String("en-BB"),  QLatin1String("en")       },
0248     { QLatin1String("en-BM"),  QLatin1String("en")       },
0249     { QLatin1String("en-BN"),  QLatin1String("en")       },
0250     { QLatin1String("en-BS"),  QLatin1String("en")       },
0251     { QLatin1String("en-BW"),  QLatin1String("en")       },
0252     { QLatin1String("en-BZ"),  QLatin1String("en")       },
0253     { QLatin1String("en-CA"),  QLatin1String("en")       },
0254     { QLatin1String("en-CB"),  QLatin1String("en")       },
0255     { QLatin1String("en-CK"),  QLatin1String("en")       },
0256     { QLatin1String("en-CM"),  QLatin1String("en")       },
0257     { QLatin1String("en-DM"),  QLatin1String("en")       },
0258     { QLatin1String("en-ER"),  QLatin1String("en")       },
0259     { QLatin1String("en-ET"),  QLatin1String("en")       },
0260     { QLatin1String("en-FJ"),  QLatin1String("en")       },
0261     { QLatin1String("en-FK"),  QLatin1String("en")       },
0262     { QLatin1String("en-FM"),  QLatin1String("en")       },
0263     { QLatin1String("en-GD"),  QLatin1String("en")       },
0264     { QLatin1String("en-GH"),  QLatin1String("en")       },
0265     { QLatin1String("en-GI"),  QLatin1String("en")       },
0266     { QLatin1String("en-GM"),  QLatin1String("en")       },
0267     { QLatin1String("en-GU"),  QLatin1String("en")       },
0268     { QLatin1String("en-GY"),  QLatin1String("en")       },
0269     { QLatin1String("en-IE"),  QLatin1String("en")       },
0270     { QLatin1String("en-IL"),  QLatin1String("en")       },
0271     { QLatin1String("en-IN"),  QLatin1String("en")       },
0272     { QLatin1String("en-IO"),  QLatin1String("en")       },
0273     { QLatin1String("en-JM"),  QLatin1String("en")       },
0274     { QLatin1String("en-KR"),  QLatin1String("en")       },
0275     { QLatin1String("en-KI"),  QLatin1String("en")       },
0276     { QLatin1String("en-KN"),  QLatin1String("en")       },
0277     { QLatin1String("en-KY"),  QLatin1String("en")       },
0278     { QLatin1String("en-LC"),  QLatin1String("en")       },
0279     { QLatin1String("en-LR"),  QLatin1String("en")       },
0280     { QLatin1String("en-LS"),  QLatin1String("en")       },
0281     { QLatin1String("en-MP"),  QLatin1String("en")       },
0282     { QLatin1String("en-MS"),  QLatin1String("en")       },
0283     { QLatin1String("en-MT"),  QLatin1String("en")       },
0284     { QLatin1String("en-MU"),  QLatin1String("en")       },
0285     { QLatin1String("en-MW"),  QLatin1String("en")       },
0286     { QLatin1String("en-MY"),  QLatin1String("en")       },
0287     { QLatin1String("en-NA"),  QLatin1String("en")       },
0288     { QLatin1String("en-NF"),  QLatin1String("en")       },
0289     { QLatin1String("en-NG"),  QLatin1String("en")       },
0290     { QLatin1String("en-NR"),  QLatin1String("en")       },
0291     { QLatin1String("en-NU"),  QLatin1String("en")       },
0292     { QLatin1String("en-NZ"),  QLatin1String("en")       },
0293     { QLatin1String("en-PG"),  QLatin1String("en")       },
0294     { QLatin1String("en-PH"),  QLatin1String("en")       },
0295     { QLatin1String("en-PK"),  QLatin1String("en")       },
0296     { QLatin1String("en-PN"),  QLatin1String("en")       },
0297     { QLatin1String("en-PR"),  QLatin1String("en")       },
0298     { QLatin1String("en-PW"),  QLatin1String("en")       },
0299     { QLatin1String("en-RW"),  QLatin1String("en")       },
0300     { QLatin1String("en-SB"),  QLatin1String("en")       },
0301     { QLatin1String("en-SC"),  QLatin1String("en")       },
0302     { QLatin1String("en-SG"),  QLatin1String("en")       },
0303     { QLatin1String("en-SH"),  QLatin1String("en")       },
0304     { QLatin1String("en-SL"),  QLatin1String("en")       },
0305     { QLatin1String("en-SO"),  QLatin1String("en")       },
0306     { QLatin1String("en-SZ"),  QLatin1String("en")       },
0307     { QLatin1String("en-TC"),  QLatin1String("en")       },
0308     { QLatin1String("en-TK"),  QLatin1String("en")       },
0309     { QLatin1String("en-TO"),  QLatin1String("en")       },
0310     { QLatin1String("en-TT"),  QLatin1String("en")       },
0311     { QLatin1String("en-UG"),  QLatin1String("en")       },
0312     { QLatin1String("en-US"),  QLatin1String("en")       },
0313     { QLatin1String("en-VC"),  QLatin1String("en")       },
0314     { QLatin1String("en-VG"),  QLatin1String("en")       },
0315     { QLatin1String("en-VI"),  QLatin1String("en")       },
0316     { QLatin1String("en-VU"),  QLatin1String("en")       },
0317     { QLatin1String("en-WS"),  QLatin1String("en")       },
0318     { QLatin1String("en-ZA"),  QLatin1String("en")       },
0319     { QLatin1String("en-ZM"),  QLatin1String("en")       },
0320     { QLatin1String("en-ZW"),  QLatin1String("en")       },
0321     { QLatin1String("eo-FR"),  QLatin1String("eo")       },
0322     { QLatin1String("et-EE"),  QLatin1String("et")       },
0323     { QLatin1String("es-AR"),  QLatin1String("es")       },
0324     { QLatin1String("es-BO"),  QLatin1String("es")       },
0325     { QLatin1String("es-CL"),  QLatin1String("es")       },
0326     { QLatin1String("es-CQ"),  QLatin1String("es")       },
0327     { QLatin1String("es-CR"),  QLatin1String("es")       },
0328     { QLatin1String("es-CU"),  QLatin1String("es")       },
0329     { QLatin1String("es-DO"),  QLatin1String("es")       },
0330     { QLatin1String("es-EC"),  QLatin1String("es")       },
0331     { QLatin1String("es-ES"),  QLatin1String("es")       },
0332     { QLatin1String("es-GT"),  QLatin1String("es")       },
0333     { QLatin1String("es-HN"),  QLatin1String("es")       },
0334     { QLatin1String("es-MX"),  QLatin1String("es")       },
0335     { QLatin1String("es-NI"),  QLatin1String("es")       },
0336     { QLatin1String("es-PA"),  QLatin1String("es")       },
0337     { QLatin1String("es-PE"),  QLatin1String("es")       },
0338     { QLatin1String("es-PR"),  QLatin1String("es")       },
0339     { QLatin1String("es-PY"),  QLatin1String("es")       },
0340     { QLatin1String("es-SV"),  QLatin1String("es")       },
0341     { QLatin1String("es-US"),  QLatin1String("es")       },
0342     { QLatin1String("es-UY"),  QLatin1String("es")       },
0343     { QLatin1String("es-VE"),  QLatin1String("es")       },
0344     { QLatin1String("eu-ES"),  QLatin1String("eu")       },
0345     { QLatin1String("fa-IR"),  QLatin1String("fa")       },
0346     { QLatin1String("fil-PH"), QLatin1String("fil")      },
0347     { QLatin1String("fi-FI"),  QLatin1String("fi")       },
0348     { QLatin1String("fj-FJ"),  QLatin1String("fj")       },
0349     { QLatin1String("fr-AD"),  QLatin1String("fr")       },
0350     { QLatin1String("fr-BF"),  QLatin1String("fr")       },
0351     { QLatin1String("fr-BI"),  QLatin1String("fr")       },
0352     { QLatin1String("fr-BJ"),  QLatin1String("fr")       },
0353     { QLatin1String("fr-BE"),  QLatin1String("fr")       },
0354     { QLatin1String("fr-CA"),  QLatin1String("fr")       },
0355     { QLatin1String("fr-CD"),  QLatin1String("fr")       },
0356     { QLatin1String("fr-CH"),  QLatin1String("fr")       },
0357     { QLatin1String("fr-CI"),  QLatin1String("fr")       },
0358     { QLatin1String("fr-CM"),  QLatin1String("fr")       },
0359     { QLatin1String("fr-DJ"),  QLatin1String("fr")       },
0360     { QLatin1String("fr-FR"),  QLatin1String("fr")       },
0361     { QLatin1String("fr-GA"),  QLatin1String("fr")       },
0362     { QLatin1String("fr-GB"),  QLatin1String("fr")       },
0363     { QLatin1String("fr-GF"),  QLatin1String("fr")       },
0364     { QLatin1String("fr-GN"),  QLatin1String("fr")       },
0365     { QLatin1String("fr-GP"),  QLatin1String("fr")       },
0366     { QLatin1String("fr-HT"),  QLatin1String("fr")       },
0367     { QLatin1String("fr-IT"),  QLatin1String("fr")       },
0368     { QLatin1String("fr-KM"),  QLatin1String("fr")       },
0369     { QLatin1String("fr-LB"),  QLatin1String("fr")       },
0370     { QLatin1String("fr-LU"),  QLatin1String("fr")       },
0371     { QLatin1String("fr-MC"),  QLatin1String("fr")       },
0372     { QLatin1String("fr-MG"),  QLatin1String("fr")       },
0373     { QLatin1String("fr-ML"),  QLatin1String("fr")       },
0374     { QLatin1String("fr-MQ"),  QLatin1String("fr")       },
0375     { QLatin1String("fr-NC"),  QLatin1String("fr")       },
0376     { QLatin1String("fr-PF"),  QLatin1String("fr")       },
0377     { QLatin1String("fr-PM"),  QLatin1String("fr")       },
0378     { QLatin1String("fr-RE"),  QLatin1String("fr")       },
0379     { QLatin1String("fr-RW"),  QLatin1String("fr")       },
0380     { QLatin1String("fr-SC"),  QLatin1String("fr")       },
0381     { QLatin1String("fr-TD"),  QLatin1String("fr")       },
0382     { QLatin1String("fr-TG"),  QLatin1String("fr")       },
0383     { QLatin1String("fr-VU"),  QLatin1String("fr")       },
0384     { QLatin1String("fr-WF"),  QLatin1String("fr")       },
0385     { QLatin1String("fr-YT"),  QLatin1String("fr")       },
0386     { QLatin1String("fy-NL"),  QLatin1String("fy")       },
0387     { QLatin1String("ga-GB"),  QLatin1String("ga")       },
0388     { QLatin1String("ga-IE"),  QLatin1String("ga")       },
0389     { QLatin1String("gd-GB"),  QLatin1String("gd")       },
0390     { QLatin1String("gl-ES"),  QLatin1String("gl")       },
0391 //    { QLatin1String("gv-GB"),  QLatin1String("")          },
0392     { QLatin1String("gu-IN"),  QLatin1String("gu")       },
0393     { QLatin1String("ha-TD"),  QLatin1String("ha")       },
0394     { QLatin1String("haw-US"), QLatin1String("haw")      },
0395     { QLatin1String("he-IL"),  QLatin1String("he")       },
0396     { QLatin1String("hi-IN"),  QLatin1String("hi")       },
0397     { QLatin1String("hr-HR"),  QLatin1String("hr")       },
0398     { QLatin1String("hr-BA"),  QLatin1String("hr")       },
0399     { QLatin1String("hmn-LA"), QLatin1String("hmn")      },
0400     { QLatin1String("ht-FR"),  QLatin1String("ht")       },
0401     { QLatin1String("hu-HU"),  QLatin1String("hu")       },
0402     { QLatin1String("hu-SI"),  QLatin1String("hu")       },
0403     { QLatin1String("hy-AM"),  QLatin1String("hy")       },
0404     { QLatin1String("id-ID"),  QLatin1String("id")       },
0405     { QLatin1String("ig-NG"),  QLatin1String("ig")       },
0406     { QLatin1String("is-IS"),  QLatin1String("is")       },
0407 //    { QLatin1String("ii-CN"),  QLatin1String("")         },
0408     { QLatin1String("it-CH"),  QLatin1String("it")       },
0409     { QLatin1String("it-HR"),  QLatin1String("it")       },
0410     { QLatin1String("it-IT"),  QLatin1String("it")       },
0411     { QLatin1String("it-SI"),  QLatin1String("it")       },
0412     { QLatin1String("it-SM"),  QLatin1String("it")       },
0413     { QLatin1String("ja-JP"),  QLatin1String("ja")       },
0414     { QLatin1String("jw-ID"),  QLatin1String("jw")       },
0415     { QLatin1String("ka-GE"),  QLatin1String("ka")       },
0416     { QLatin1String("kn-IN"),  QLatin1String("kn")       },
0417     { QLatin1String("kk-KZ"),  QLatin1String("kk")       },
0418 //     { QLatin1String("kl-GL"),  QLatin1String("")         },
0419     { QLatin1String("km-KH"),  QLatin1String("km")       },
0420     { QLatin1String("ko-KR"),  QLatin1String("ko")       },
0421     { QLatin1String("ko-KP"),  QLatin1String("ko")       },
0422     { QLatin1String("ku-IR"),  QLatin1String("ku")       },
0423     { QLatin1String("ky-KG"),  QLatin1String("ky")       },
0424 //    { QLatin1String("kw-GB"),  QLatin1String("")          },
0425     { QLatin1String("la-IT"),  QLatin1String("la")       },
0426 //    { QLatin1String("ln-CD"),  QLatin1String("")          },
0427 //    { QLatin1String("ln-CG"),  QLatin1String("")          },
0428     { QLatin1String("lo-LA"),  QLatin1String("lo")       },
0429     { QLatin1String("lb-LU"),  QLatin1String("lb")       },
0430     { QLatin1String("lt-LT"),  QLatin1String("lt")       },
0431     { QLatin1String("lv-LV"),  QLatin1String("lv")       },
0432     { QLatin1String("mg-MG"),  QLatin1String("mg")       },
0433     { QLatin1String("mi-NZ"),  QLatin1String("mi")       },
0434     { QLatin1String("mk-MK"),  QLatin1String("mk")       },
0435     { QLatin1String("ml-IN"),  QLatin1String("ml")       },
0436     { QLatin1String("mhr-RU"), QLatin1String("mhr")      },
0437     { QLatin1String("mn-MN"),  QLatin1String("mn")       },
0438     { QLatin1String("mn-CN"),  QLatin1String("mn")       },
0439     { QLatin1String("mr-IN"),  QLatin1String("mr")       },
0440     { QLatin1String("mrj-RU"), QLatin1String("mrj")      },
0441     { QLatin1String("ms-BN"),  QLatin1String("ms")       },
0442     { QLatin1String("ms-MY"),  QLatin1String("ms")       },
0443     { QLatin1String("ms-SG"),  QLatin1String("ms")       },
0444     { QLatin1String("mt-MT"),  QLatin1String("mt")       },
0445     { QLatin1String("my-MM"),  QLatin1String("my")       },
0446 //     { QLatin1String("nb-NO"),  QLatin1String("")         },
0447     { QLatin1String("ne-NP"),  QLatin1String("ne")       },
0448     { QLatin1String("nl-AN"),  QLatin1String("nl")       },
0449     { QLatin1String("nl-AW"),  QLatin1String("nl")       },
0450     { QLatin1String("nl-NL"),  QLatin1String("nl")       },
0451     { QLatin1String("nl-BE"),  QLatin1String("nl")       },
0452     { QLatin1String("nl-SR"),  QLatin1String("nl")       },
0453 //     { QLatin1String("nn-NO"),  QLatin1String("")         },
0454     { QLatin1String("no-NO"),  QLatin1String("no")       },
0455 //     { QLatin1String("ns-ZA"),  QLatin1String("")         },
0456     { QLatin1String("ny-ZM"),  QLatin1String("ny")       },
0457 //     { QLatin1String("oc-FR"),  QLatin1String("")         },
0458     { QLatin1String("or-IN"),  QLatin1String("or")       },
0459     { QLatin1String("pap-AW"), QLatin1String("pap")      },
0460     { QLatin1String("pa-IN"),  QLatin1String("pa")       },
0461     { QLatin1String("pl-PL"),  QLatin1String("pl")       },
0462     { QLatin1String("pt-AO"),  QLatin1String("pt")       },
0463     { QLatin1String("pt-BR"),  QLatin1String("pt")       },
0464     { QLatin1String("pt-CV"),  QLatin1String("pt")       },
0465     { QLatin1String("pt-GW"),  QLatin1String("pt")       },
0466     { QLatin1String("pt-MZ"),  QLatin1String("pt")       },
0467     { QLatin1String("pt-PT"),  QLatin1String("pt")       },
0468     { QLatin1String("pt-ST"),  QLatin1String("pt")       },
0469     { QLatin1String("ps-AF"),  QLatin1String("ps")       },
0470     { QLatin1String("otq-MX"), QLatin1String("otq")      },
0471     { QLatin1String("ro-RO"),  QLatin1String("ro")       },
0472     { QLatin1String("ru-RU"),  QLatin1String("ru")       },
0473     { QLatin1String("rw-RW"),  QLatin1String("rw")       },
0474 //     { QLatin1String("sa-IN"),  QLatin1String("")         },
0475     { QLatin1String("sd-PK"),  QLatin1String("sd")       },
0476 //     { QLatin1String("se-FI"),  QLatin1String("")         },
0477 //     { QLatin1String("se-NO"),  QLatin1String("")         },
0478 //     { QLatin1String("se-SE"),  QLatin1String("")         },
0479     { QLatin1String("si-LK"),  QLatin1String("si")       },
0480     { QLatin1String("sk-SK"),  QLatin1String("sk")       },
0481     { QLatin1String("sl-SI"),  QLatin1String("sl")       },
0482     { QLatin1String("sm-WS"),  QLatin1String("sm")       },
0483     { QLatin1String("sn-ZW"),  QLatin1String("sn")       },
0484     { QLatin1String("so-SO"),  QLatin1String("so")       },
0485     { QLatin1String("sq-AL"),  QLatin1String("sq")       },
0486     { QLatin1String("sr-BA"),  QLatin1String("sr")       },
0487     { QLatin1String("sr-YU"),  QLatin1String("sr")       },
0488     { QLatin1String("sr-SP"),  QLatin1String("sr-Latin") },
0489 //     { QLatin1String("ss-SZ")     ,  QLatin1String("")       },
0490 //     { QLatin1String("ss-ZA")     ,  QLatin1String("")       },
0491     { QLatin1String("st-LS"),  QLatin1String("st")       },
0492     { QLatin1String("su-ID"),  QLatin1String("su")       },
0493     { QLatin1String("sv-FI"),  QLatin1String("sv")       },
0494     { QLatin1String("sv-SE"),  QLatin1String("sv")       },
0495     { QLatin1String("sw-KE"),  QLatin1String("sw")       },
0496     { QLatin1String("sw-TZ"),  QLatin1String("sw")       },
0497     { QLatin1String("ta-IN"),  QLatin1String("ta")       },
0498     { QLatin1String("ta-SG"),  QLatin1String("ta")       },
0499     { QLatin1String("te-IN"),  QLatin1String("te")       },
0500     { QLatin1String("tg-TJ"),  QLatin1String("tg")       },
0501     { QLatin1String("th-TH"),  QLatin1String("th")       },
0502     { QLatin1String("tk-TM"),  QLatin1String("tk")       },
0503     { QLatin1String("tl-PH"),  QLatin1String("tl")       },
0504     { QLatin1String("to-TO"),  QLatin1String("to")       },
0505     { QLatin1String("tlh-US"), QLatin1String("tlh")      },
0506 //    { QLatin1String(""),  QLatin1String("tlh-Qaak") },      // Klingon native language tlhIngan-Hol (star-trek): do not exists as 2 letters code
0507 //    { QLatin1String("tn-ZA"),  QLatin1String("")         },
0508     { QLatin1String("tr-BG"),  QLatin1String("tr")       },
0509     { QLatin1String("tr-CY"),  QLatin1String("tr")       },
0510     { QLatin1String("tr-TR"),  QLatin1String("tr")       },
0511     { QLatin1String("tt-RU"),  QLatin1String("tt")       },
0512     { QLatin1String("ty-PF"),  QLatin1String("ty")       },
0513     { QLatin1String("udm-RU"), QLatin1String("udm")      },
0514     { QLatin1String("ug-CN"),  QLatin1String("ug")       },
0515     { QLatin1String("uk-UA"),  QLatin1String("uk")       },
0516     { QLatin1String("ur-IN"),  QLatin1String("ur")       },
0517     { QLatin1String("ur-PK"),  QLatin1String("ur")       },
0518     { QLatin1String("uz-UZ"),  QLatin1String("uz")       },
0519     { QLatin1String("vi-VN"),  QLatin1String("vi")       },
0520 //     { QLatin1String("wo-SN"),  QLatin1String("")         },
0521     { QLatin1String("xh-ZA"),  QLatin1String("xh")       },
0522     { QLatin1String("yi-DE"),  QLatin1String("yi")       },
0523     { QLatin1String("yo-NG"),  QLatin1String("yo")       },
0524     { QLatin1String("yua-MX"), QLatin1String("yua")      },
0525     { QLatin1String("yue-CN"), QLatin1String("yue")      },
0526     { QLatin1String("zh-CN"),  QLatin1String("zh-CN")    },         // Chinese (Simplified, PRC)
0527     { QLatin1String("zh-TW"),  QLatin1String("zh-TW")    },         // Chinese (Traditional, Taiwan)
0528     { QLatin1String("zu-ZA"),  QLatin1String("zu")       }
0529 };
0530 
0531 // --------------------------------------------------------------------------------------------
0532 
0533 const QMap<QString, QString> DOnlineTranslator::Private::s_rfc3066LanguageCodesGoogle =
0534 {
0535     { QLatin1String("iw-IL"),  QLatin1String("iw")       }          //                                            NOTE: Google translator only.
0536 };
0537 
0538 // --------------------------------------------------------------------------------------------
0539 
0540 const QMap<QString, QString> DOnlineTranslator::Private::s_rfc3066LanguageCodesYandex =
0541 {
0542     { QLatin1String("jv-ID"),  QLatin1String("jv")       },         //                                            NOTE: Yandex translator only
0543     { QLatin1String("zn-CN"),  QLatin1String("zn")       }          //                                            NOTE: Yandex translator only
0544 };
0545 
0546 // --------------------------------------------------------------------------------------------
0547 
0548 const QMap<QString, QString> DOnlineTranslator::Private::s_rfc3066LanguageCodesBing =
0549 {
0550     { QLatin1String("bs-BG"),  QLatin1String("bs-Latn")  },         //                                            NOTE: Bing translator only
0551 //     { QLatin1String("")     ,  QLatin1String("mww")      },      // Hmong: do not exists as 2 letters code   ; NOTE: Bing translator only
0552     { QLatin1String("sr-RS"),  QLatin1String("sr-Cyrl")  },         //                                            NOTE: Bing translator only
0553     { QLatin1String("zh-CN"),  QLatin1String("zh-Hans")  },         // SimplifiedChinese                        ; NOTE: Bing translator only
0554     { QLatin1String("zh-TW"),  QLatin1String("zh-Hant")  }          // TraditionalChinese                       ; NOTE: Bing translator only
0555 };
0556 
0557 // --------------------------------------------------------------------------------------------
0558 
0559 const QMap<QString, QString> DOnlineTranslator::Private::s_rfc3066LanguageCodesLingva =
0560 {
0561     { QLatin1String("zh-TW"),  QLatin1String("zh_HANT")  },         // TraditionalChinese                       ; NOTE: Lingva translator only
0562     { QLatin1String("zh-MO"),  QLatin1String("zh")       },         // Chinese (Traditional, Macao S.A.R.)      ; NOTE: Lingva translator only
0563     { QLatin1String("zh-HK"),  QLatin1String("zh")       },         // Chinese (Traditional, Hong Kong S.A.R.)  ; NOTE: Lingva translator only
0564     { QLatin1String("zh-SG"),  QLatin1String("zh")       }          // Chinese (Simplified, Singapore)          ; NOTE: Lingva translator only
0565 };
0566 
0567 // --------------------------------------------------------------------------------------------
0568 
0569 DOnlineTranslator::Private::Private(DOnlineTranslator* const parent)
0570     : stateMachine  (new QStateMachine(parent)),
0571       networkManager(NetworkManager::instance()->getNetworkManager(parent)),
0572       libreUrl      (QLatin1String("https://translate.argosopentech.com")),
0573       lingvaUrl     (QLatin1String("https://lingva.ml"))
0574 {
0575 }
0576 
0577 // --------------------------------------------------------------------------------------------
0578 
0579 const QMap<DOnlineTts::Emotion, QString> DOnlineTts::Private::s_emotionCodes =
0580 {
0581     { Neutral, QStringLiteral("neutral") },
0582     { Good,    QStringLiteral("good")    },
0583     { Evil,    QStringLiteral("evil")    }
0584 };
0585 
0586 const QMap<DOnlineTts::Voice, QString> DOnlineTts::Private::s_voiceCodes =
0587 {
0588     { Zahar,   QStringLiteral("zahar")   },
0589     { Ermil,   QStringLiteral("ermil")   },
0590     { Jane,    QStringLiteral("jane")    },
0591     { Oksana,  QStringLiteral("oksana")  },
0592     { Alyss,   QStringLiteral("alyss")   },
0593     { Omazh,   QStringLiteral("omazh")   }
0594 };
0595 
0596 } // namespace Digikam