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 }