File indexing completed on 2024-11-24 04:16:54

0001 /*
0002   SPDX-FileCopyrightText: 2012-2024 Laurent Montel <montel@kde.org>
0003 
0004   SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "translatorutil.h"
0008 #include "texttranslator_debug.h"
0009 #include <KConfigGroup>
0010 #include <KLocalizedString>
0011 #include <KSharedConfig>
0012 #include <QComboBox>
0013 using namespace TextTranslator;
0014 
0015 TranslatorUtil::TranslatorUtil() = default;
0016 
0017 QMap<TranslatorUtil::Language, QString> TranslatorUtil::translatedLanguages()
0018 {
0019     QMap<TranslatorUtil::Language, QString> map;
0020     for (int i = TranslatorUtil::Language::automatic; i < TranslatorUtil::Language::lastLanguage; ++i) {
0021         map.insert(static_cast<TranslatorUtil::Language>(i), translatedLanguage(static_cast<TranslatorUtil::Language>(i)));
0022     }
0023     return map;
0024 }
0025 
0026 QString TranslatorUtil::translatedLanguage(TranslatorUtil::Language lang)
0027 {
0028     QString ret;
0029     switch (lang) {
0030     case automatic:
0031         ret = i18n("Detect language");
0032         break;
0033     case hmong:
0034         ret = i18n("Hmong");
0035         break;
0036     case bs:
0037         ret = i18n("Bosnian");
0038         break;
0039     case en:
0040         ret = i18n("English");
0041         break;
0042     case zh:
0043         ret = i18n("Chinese (Simplified)");
0044         break;
0045     case zt:
0046         ret = i18n("Chinese (Traditional)");
0047         break;
0048     case nl:
0049         ret = i18n("Dutch");
0050         break;
0051     case fr:
0052         ret = i18n("French");
0053         break;
0054     case de:
0055         ret = i18n("German");
0056         break;
0057     case el:
0058         ret = i18n("Greek");
0059         break;
0060     case it:
0061         ret = i18n("Italian");
0062         break;
0063     case ja:
0064         ret = i18n("Japanese");
0065         break;
0066     case ko:
0067         ret = i18n("Korean");
0068         break;
0069     case pt:
0070         ret = i18n("Portuguese");
0071         break;
0072     case ru:
0073         ret = i18n("Russian");
0074         break;
0075     case es:
0076         ret = i18n("Spanish");
0077         break;
0078     case af:
0079         ret = i18n("Afrikaans");
0080         break;
0081     case sq:
0082         ret = i18n("Albanian");
0083         break;
0084     case ar:
0085         ret = i18n("Arabic");
0086         break;
0087     case hy:
0088         ret = i18n("Armenian");
0089         break;
0090     case az:
0091         ret = i18n("Azerbaijani");
0092         break;
0093     case eu:
0094         ret = i18n("Basque");
0095         break;
0096     case be:
0097         ret = i18n("Belarusian");
0098         break;
0099     case bg:
0100         ret = i18n("Bulgarian");
0101         break;
0102     case ca:
0103         ret = i18n("Catalan");
0104         break;
0105     case hr:
0106         ret = i18n("Croatian");
0107         break;
0108     case cs:
0109         ret = i18n("Czech");
0110         break;
0111     case da:
0112         ret = i18n("Danish");
0113         break;
0114     case et:
0115         ret = i18n("Estonian");
0116         break;
0117     case tl:
0118         ret = i18n("Filipino");
0119         break;
0120     case fi:
0121         ret = i18n("Finnish");
0122         break;
0123     case gl:
0124         ret = i18n("Galician");
0125         break;
0126     case ka:
0127         ret = i18n("Georgian");
0128         break;
0129     case ht:
0130         ret = i18n("Haitian Creole");
0131         break;
0132     case iw:
0133         ret = i18n("Hebrew");
0134         break;
0135     case hi:
0136         ret = i18n("Hindi");
0137         break;
0138     case hu:
0139         ret = i18n("Hungarian");
0140         break;
0141     case is:
0142         ret = i18n("Icelandic");
0143         break;
0144     case id:
0145         ret = i18n("Indonesian");
0146         break;
0147     case ga:
0148         ret = i18n("Irish");
0149         break;
0150     case lv:
0151         ret = i18n("Latvian");
0152         break;
0153     case lt:
0154         ret = i18n("Lithuanian");
0155         break;
0156     case mk:
0157         ret = i18n("Macedonian");
0158         break;
0159     case ms:
0160         ret = i18n("Malay");
0161         break;
0162     case mt:
0163         ret = i18n("Maltese");
0164         break;
0165     case no:
0166         ret = i18n("Norwegian");
0167         break;
0168     case fa:
0169         ret = i18n("Persian");
0170         break;
0171     case pl:
0172         ret = i18n("Polish");
0173         break;
0174     case ro:
0175         ret = i18n("Romanian");
0176         break;
0177     case sr:
0178         ret = i18n("Serbian");
0179         break;
0180     case sk:
0181         ret = i18n("Slovak");
0182         break;
0183     case sl:
0184         ret = i18n("Slovenian");
0185         break;
0186     case sw:
0187         ret = i18n("Swahili");
0188         break;
0189     case sv:
0190         ret = i18n("Swedish");
0191         break;
0192     case th:
0193         ret = i18n("Thai");
0194         break;
0195     case tr:
0196         ret = i18n("Turkish");
0197         break;
0198     case uk:
0199         ret = i18n("Ukrainian");
0200         break;
0201     case ur:
0202         ret = i18n("Urdu");
0203         break;
0204     case vi:
0205         ret = i18n("Vietnamese");
0206         break;
0207     case cy:
0208         ret = i18n("Welsh");
0209         break;
0210     case yi:
0211         ret = i18n("Yiddish");
0212         break;
0213     }
0214     return ret;
0215 }
0216 
0217 QString TranslatorUtil::searchI18nFromLanguage(const QString &langCode)
0218 {
0219     for (int i = TranslatorUtil::Language::automatic; i < TranslatorUtil::Language::lastLanguage; ++i) {
0220         if (langCode == languageCode(static_cast<TranslatorUtil::Language>(i))) {
0221             return translatedLanguage(static_cast<TranslatorUtil::Language>(i));
0222         }
0223     }
0224     return {};
0225 }
0226 
0227 TranslatorUtil::Language TranslatorUtil::stringToLanguage(const QString &str)
0228 {
0229     if (str == QLatin1String("en")) {
0230         return TranslatorUtil::en;
0231     } else if (str == QLatin1String("fr")) {
0232         return TranslatorUtil::fr;
0233     } else if (str == QLatin1String("es")) {
0234         return TranslatorUtil::es;
0235     } else if (str == QLatin1String("pl")) {
0236         return TranslatorUtil::pl;
0237     } else if (str == QLatin1String("de")) {
0238         return TranslatorUtil::de;
0239     } else if (str == QLatin1String("cs")) {
0240         return TranslatorUtil::cs;
0241     } else if (str == QLatin1String("bg")) {
0242         return TranslatorUtil::bg;
0243     } else if (str == QLatin1String("et")) {
0244         return TranslatorUtil::et;
0245         //    } else if (str == QLatin1String("nn")) {
0246         //        return TranslatorUtil::nn;
0247     } else {
0248         qCWarning(TEXTTRANSLATOR_LOG) << " Impossible to find TranslatorUtil::Language for " << str;
0249     }
0250     return TranslatorUtil::en;
0251 }
0252 
0253 QString TranslatorUtil::languageCode(TranslatorUtil::Language lang)
0254 {
0255     QString ret;
0256     switch (lang) {
0257     case automatic:
0258         ret = QStringLiteral("auto");
0259         break;
0260     case hmong:
0261         ret = QStringLiteral("hmn");
0262         break;
0263     case en:
0264         ret = QStringLiteral("en");
0265         break;
0266     case zh:
0267         ret = QStringLiteral("zh-CN");
0268         break;
0269     case zt:
0270         ret = QStringLiteral("zh-TW");
0271         break;
0272     case nl:
0273         ret = QStringLiteral("nl");
0274         break;
0275     case fr:
0276         ret = QStringLiteral("fr");
0277         break;
0278     case de:
0279         ret = QStringLiteral("de");
0280         break;
0281     case el:
0282         ret = QStringLiteral("el");
0283         break;
0284     case it:
0285         ret = QStringLiteral("it");
0286         break;
0287     case ja:
0288         ret = QStringLiteral("ja");
0289         break;
0290     case ko:
0291         ret = QStringLiteral("ko");
0292         break;
0293     case pt:
0294         ret = QStringLiteral("pt");
0295         break;
0296     case ru:
0297         ret = QStringLiteral("ru");
0298         break;
0299     case es:
0300         ret = QStringLiteral("es");
0301         break;
0302     case af:
0303         ret = QStringLiteral("af");
0304         break;
0305     case sq:
0306         ret = QStringLiteral("sq");
0307         break;
0308     case ar:
0309         ret = QStringLiteral("ar");
0310         break;
0311     case hy:
0312         ret = QStringLiteral("hy");
0313         break;
0314     case az:
0315         ret = QStringLiteral("az");
0316         break;
0317     case eu:
0318         ret = QStringLiteral("eu");
0319         break;
0320     case be:
0321         ret = QStringLiteral("be");
0322         break;
0323     case bg:
0324         ret = QStringLiteral("bg");
0325         break;
0326     case ca:
0327         ret = QStringLiteral("ca");
0328         break;
0329     case hr:
0330         ret = QStringLiteral("hr");
0331         break;
0332     case cs:
0333         ret = QStringLiteral("cs");
0334         break;
0335     case da:
0336         ret = QStringLiteral("da");
0337         break;
0338     case et:
0339         ret = QStringLiteral("et");
0340         break;
0341     case tl:
0342         ret = QStringLiteral("tl");
0343         break;
0344     case fi:
0345         ret = QStringLiteral("fi");
0346         break;
0347     case gl:
0348         ret = QStringLiteral("gl");
0349         break;
0350     case ka:
0351         ret = QStringLiteral("ka");
0352         break;
0353     case ht:
0354         ret = QStringLiteral("ht");
0355         break;
0356     case iw:
0357         ret = QStringLiteral("he");
0358         break;
0359     case hi:
0360         ret = QStringLiteral("hi");
0361         break;
0362     case hu:
0363         ret = QStringLiteral("hu");
0364         break;
0365     case is:
0366         ret = QStringLiteral("is");
0367         break;
0368     case id:
0369         ret = QStringLiteral("id");
0370         break;
0371     case ga:
0372         ret = QStringLiteral("ga");
0373         break;
0374     case lv:
0375         ret = QStringLiteral("lv");
0376         break;
0377     case lt:
0378         ret = QStringLiteral("lt");
0379         break;
0380     case mk:
0381         ret = QStringLiteral("mk");
0382         break;
0383     case ms:
0384         ret = QStringLiteral("ms");
0385         break;
0386     case mt:
0387         ret = QStringLiteral("mt");
0388         break;
0389     case no:
0390         ret = QStringLiteral("no");
0391         break;
0392     case fa:
0393         ret = QStringLiteral("fa");
0394         break;
0395     case pl:
0396         ret = QStringLiteral("pl");
0397         break;
0398     case ro:
0399         ret = QStringLiteral("ro");
0400         break;
0401     case sr:
0402         ret = QStringLiteral("sr");
0403         break;
0404     case sk:
0405         ret = QStringLiteral("sk");
0406         break;
0407     case sl:
0408         ret = QStringLiteral("sl");
0409         break;
0410     case sw:
0411         ret = QStringLiteral("sw");
0412         break;
0413     case sv:
0414         ret = QStringLiteral("sv");
0415         break;
0416     case th:
0417         ret = QStringLiteral("th");
0418         break;
0419     case tr:
0420         ret = QStringLiteral("tr");
0421         break;
0422     case uk:
0423         ret = QStringLiteral("uk");
0424         break;
0425     case ur:
0426         ret = QStringLiteral("ur");
0427         break;
0428     case vi:
0429         ret = QStringLiteral("vi");
0430         break;
0431     case cy:
0432         ret = QStringLiteral("cy");
0433         break;
0434     case yi:
0435         ret = QStringLiteral("yi");
0436         break;
0437     case bs:
0438         return QStringLiteral("bs");
0439     }
0440     return ret;
0441 }
0442 
0443 void TranslatorUtil::addItemToFromComboBox(QComboBox *combo, const QString &languageCode, const QString &translatedStr)
0444 {
0445     combo->addItem(translatedStr, languageCode);
0446 }
0447 
0448 QString TranslatorUtil::groupTranslateName()
0449 {
0450     return QStringLiteral("Translate");
0451 }
0452 
0453 QString TranslatorUtil::engineTranslateName()
0454 {
0455     return QStringLiteral("engine");
0456 }
0457 
0458 QString TranslatorUtil::defaultEngineName()
0459 {
0460     return QStringLiteral("google");
0461 }
0462 
0463 QString TranslatorUtil::loadEngine()
0464 {
0465     KConfigGroup myGeneralGroup(KSharedConfig::openConfig(), groupTranslateName());
0466     const QString engineTypeStr = myGeneralGroup.readEntry(engineTranslateName(), defaultEngineName()); // Default google
0467     return engineTypeStr;
0468 }
0469 
0470 void TranslatorUtil::saveEngineSettings(const QString &engineName)
0471 {
0472     KConfigGroup myGroup(KSharedConfig::openConfig(), groupTranslateName());
0473     myGroup.writeEntry(engineTranslateName(), engineName);
0474     myGroup.sync();
0475 }