1 /* 2 SPDX-FileCopyrightText: 2007-2009 Sergio Pistone <sergio_pistone@yahoo.com.ar> 3 SPDX-FileCopyrightText: 2010-2018 Mladen Milinkovic <max@smoothware.net> 4 5 SPDX-License-Identifier: GPL-2.0-or-later 6 */ 7 8 #include "languagecode.h" 9 10 #include <QMap> 11 #include <QLocale> 12 13 #include <KLocalizedString> 14 15 QString toIso2(const QString & iso3Code)16LanguageCode::toIso2(const QString &iso3Code) 17 { 18 static QMap<QString, QString> map; 19 if(map.isEmpty()) { 20 map["aar"] = "aa"; 21 map["abk"] = "ab"; 22 map["afr"] = "af"; 23 map["aka"] = "ak"; 24 map["alb"] = "sq"; 25 map["amh"] = "am"; 26 map["ara"] = "ar"; 27 map["arg"] = "an"; 28 map["arm"] = "hy"; 29 map["asm"] = "as"; 30 map["ava"] = "av"; 31 map["ave"] = "ae"; 32 map["aym"] = "ay"; 33 map["aze"] = "az"; 34 map["bak"] = "ba"; 35 map["bam"] = "bm"; 36 map["baq"] = "eu"; 37 map["bel"] = "be"; 38 map["ben"] = "bn"; 39 map["bih"] = "bh"; 40 map["bis"] = "bi"; 41 map["bos"] = "bs"; 42 map["bre"] = "br"; 43 map["bul"] = "bg"; 44 map["bur"] = "my"; 45 map["cat"] = "ca"; 46 map["cha"] = "ch"; 47 map["che"] = "ce"; 48 map["chi"] = "zh"; 49 map["chu"] = "cu"; 50 map["chv"] = "cv"; 51 map["cor"] = "kw"; 52 map["cos"] = "co"; 53 map["cre"] = "cr"; 54 map["cze"] = "cs"; 55 map["dan"] = "da"; 56 map["div"] = "dv"; 57 map["dut"] = "nl"; 58 map["dzo"] = "dz"; 59 map["eng"] = "en"; 60 map["epo"] = "eo"; 61 map["est"] = "et"; 62 map["ewe"] = "ee"; 63 map["fao"] = "fo"; 64 map["fij"] = "fj"; 65 map["fin"] = "fi"; 66 map["fre"] = "fr"; 67 map["fry"] = "fy"; 68 map["ful"] = "ff"; 69 map["geo"] = "ka"; 70 map["ger"] = "de"; 71 map["gla"] = "gd"; 72 map["gle"] = "ga"; 73 map["glg"] = "gl"; 74 map["glv"] = "gv"; 75 map["gre"] = "el"; 76 map["grn"] = "gn"; 77 map["guj"] = "gu"; 78 map["hat"] = "ht"; 79 map["hau"] = "ha"; 80 map["heb"] = "he"; 81 map["her"] = "hz"; 82 map["hin"] = "hi"; 83 map["hmo"] = "ho"; 84 map["hrv"] = "hr"; 85 map["hun"] = "hu"; 86 map["ibo"] = "ig"; 87 map["ice"] = "is"; 88 map["ido"] = "io"; 89 map["iii"] = "ii"; 90 map["iku"] = "iu"; 91 map["ile"] = "ie"; 92 map["ina"] = "ia"; 93 map["ind"] = "id"; 94 map["ipk"] = "ik"; 95 map["ita"] = "it"; 96 map["jav"] = "jv"; 97 map["jpn"] = "ja"; 98 map["kal"] = "kl"; 99 map["kan"] = "kn"; 100 map["kas"] = "ks"; 101 map["kau"] = "kr"; 102 map["kaz"] = "kk"; 103 map["khm"] = "km"; 104 map["kik"] = "ki"; 105 map["kin"] = "rw"; 106 map["kir"] = "ky"; 107 map["kom"] = "kv"; 108 map["kon"] = "kg"; 109 map["kor"] = "ko"; 110 map["kua"] = "kj"; 111 map["kur"] = "ku"; 112 map["lao"] = "lo"; 113 map["lat"] = "la"; 114 map["lav"] = "lv"; 115 map["lim"] = "li"; 116 map["lin"] = "ln"; 117 map["lit"] = "lt"; 118 map["ltz"] = "lb"; 119 map["lub"] = "lu"; 120 map["lug"] = "lg"; 121 map["mac"] = "mk"; 122 map["mah"] = "mh"; 123 map["mal"] = "ml"; 124 map["mao"] = "mi"; 125 map["mar"] = "mr"; 126 map["may"] = "ms"; 127 map["mlg"] = "mg"; 128 map["mlt"] = "mt"; 129 map["mon"] = "mn"; 130 map["nau"] = "na"; 131 map["nav"] = "nv"; 132 map["nbl"] = "nr"; 133 map["nde"] = "nd"; 134 map["ndo"] = "ng"; 135 map["nep"] = "ne"; 136 map["nno"] = "nn"; 137 map["nob"] = "nb"; 138 map["nor"] = "no"; 139 map["nya"] = "ny"; 140 map["oci"] = "oc"; 141 map["oji"] = "oj"; 142 map["ori"] = "or"; 143 map["orm"] = "om"; 144 map["oss"] = "os"; 145 map["pan"] = "pa"; 146 map["per"] = "fa"; 147 map["pli"] = "pi"; 148 map["pol"] = "pl"; 149 map["por"] = "pt"; 150 map["pus"] = "ps"; 151 map["que"] = "qu"; 152 map["roh"] = "rm"; 153 map["rum"] = "ro"; 154 map["run"] = "rn"; 155 map["rus"] = "ru"; 156 map["sag"] = "sg"; 157 map["san"] = "sa"; 158 map["sin"] = "si"; 159 map["slo"] = "sk"; 160 map["slv"] = "sl"; 161 map["sme"] = "se"; 162 map["smo"] = "sm"; 163 map["sna"] = "sn"; 164 map["snd"] = "sd"; 165 map["som"] = "so"; 166 map["sot"] = "st"; 167 map["spa"] = "es"; 168 map["srd"] = "sc"; 169 map["srp"] = "sr"; 170 map["ssw"] = "ss"; 171 map["sun"] = "su"; 172 map["swa"] = "sw"; 173 map["swe"] = "sv"; 174 map["tah"] = "ty"; 175 map["tam"] = "ta"; 176 map["tat"] = "tt"; 177 map["tel"] = "te"; 178 map["tgk"] = "tg"; 179 map["tgl"] = "tl"; 180 map["tha"] = "th"; 181 map["tib"] = "bo"; 182 map["tir"] = "ti"; 183 map["ton"] = "to"; 184 map["tsn"] = "tn"; 185 map["tso"] = "ts"; 186 map["tuk"] = "tk"; 187 map["tur"] = "tr"; 188 map["twi"] = "tw"; 189 map["uig"] = "ug"; 190 map["ukr"] = "uk"; 191 map["urd"] = "ur"; 192 map["uzb"] = "uz"; 193 map["ven"] = "ve"; 194 map["vie"] = "vi"; 195 map["vol"] = "vo"; 196 map["wel"] = "cy"; 197 map["wln"] = "wa"; 198 map["wol"] = "wo"; 199 map["xho"] = "xh"; 200 map["yid"] = "yi"; 201 map["yor"] = "yo"; 202 map["zha"] = "za"; 203 map["zul"] = "zu"; 204 } 205 206 return map.contains(iso3Code) ? map[iso3Code] : QString(); 207 } 208 209 QString toIso3(const QString & iso2Code)210LanguageCode::toIso3(const QString &iso2Code) 211 { 212 static QMap<QString, QString> map; 213 if(map.isEmpty()) { 214 map["aa"] = "aar"; 215 map["ab"] = "abk"; 216 map["ae"] = "ave"; 217 map["af"] = "afr"; 218 map["ak"] = "aka"; 219 map["am"] = "amh"; 220 map["an"] = "arg"; 221 map["ar"] = "ara"; 222 map["as"] = "asm"; 223 map["av"] = "ava"; 224 map["ay"] = "aym"; 225 map["az"] = "aze"; 226 map["ba"] = "bak"; 227 map["be"] = "bel"; 228 map["bg"] = "bul"; 229 map["bh"] = "bih"; 230 map["bi"] = "bis"; 231 map["bm"] = "bam"; 232 map["bn"] = "ben"; 233 map["bo"] = "tib"; 234 map["br"] = "bre"; 235 map["bs"] = "bos"; 236 map["ca"] = "cat"; 237 map["ce"] = "che"; 238 map["ch"] = "cha"; 239 map["co"] = "cos"; 240 map["cr"] = "cre"; 241 map["cs"] = "cze"; 242 map["cu"] = "chu"; 243 map["cv"] = "chv"; 244 map["cy"] = "wel"; 245 map["da"] = "dan"; 246 map["de"] = "ger"; 247 map["dv"] = "div"; 248 map["dz"] = "dzo"; 249 map["ee"] = "ewe"; 250 map["el"] = "gre"; 251 map["en"] = "eng"; 252 map["eo"] = "epo"; 253 map["es"] = "spa"; 254 map["et"] = "est"; 255 map["eu"] = "baq"; 256 map["fa"] = "per"; 257 map["ff"] = "ful"; 258 map["fi"] = "fin"; 259 map["fj"] = "fij"; 260 map["fo"] = "fao"; 261 map["fr"] = "fre"; 262 map["fy"] = "fry"; 263 map["ga"] = "gle"; 264 map["gd"] = "gla"; 265 map["gl"] = "glg"; 266 map["gn"] = "grn"; 267 map["gu"] = "guj"; 268 map["gv"] = "glv"; 269 map["ha"] = "hau"; 270 map["he"] = "heb"; 271 map["hi"] = "hin"; 272 map["ho"] = "hmo"; 273 map["hr"] = "hrv"; 274 map["ht"] = "hat"; 275 map["hu"] = "hun"; 276 map["hy"] = "arm"; 277 map["hz"] = "her"; 278 map["ia"] = "ina"; 279 map["id"] = "ind"; 280 map["ie"] = "ile"; 281 map["ig"] = "ibo"; 282 map["ii"] = "iii"; 283 map["ik"] = "ipk"; 284 map["io"] = "ido"; 285 map["is"] = "ice"; 286 map["it"] = "ita"; 287 map["iu"] = "iku"; 288 map["ja"] = "jpn"; 289 map["jv"] = "jav"; 290 map["ka"] = "geo"; 291 map["kg"] = "kon"; 292 map["ki"] = "kik"; 293 map["kj"] = "kua"; 294 map["kk"] = "kaz"; 295 map["kl"] = "kal"; 296 map["km"] = "khm"; 297 map["kn"] = "kan"; 298 map["ko"] = "kor"; 299 map["kr"] = "kau"; 300 map["ks"] = "kas"; 301 map["ku"] = "kur"; 302 map["kv"] = "kom"; 303 map["kw"] = "cor"; 304 map["ky"] = "kir"; 305 map["la"] = "lat"; 306 map["lb"] = "ltz"; 307 map["lg"] = "lug"; 308 map["li"] = "lim"; 309 map["ln"] = "lin"; 310 map["lo"] = "lao"; 311 map["lt"] = "lit"; 312 map["lu"] = "lub"; 313 map["lv"] = "lav"; 314 map["mg"] = "mlg"; 315 map["mh"] = "mah"; 316 map["mi"] = "mao"; 317 map["mk"] = "mac"; 318 map["ml"] = "mal"; 319 map["mn"] = "mon"; 320 map["mr"] = "mar"; 321 map["ms"] = "may"; 322 map["mt"] = "mlt"; 323 map["my"] = "bur"; 324 map["na"] = "nau"; 325 map["nb"] = "nob"; 326 map["nd"] = "nde"; 327 map["ne"] = "nep"; 328 map["ng"] = "ndo"; 329 map["nl"] = "dut"; 330 map["nn"] = "nno"; 331 map["no"] = "nor"; 332 map["nr"] = "nbl"; 333 map["nv"] = "nav"; 334 map["ny"] = "nya"; 335 map["oc"] = "oci"; 336 map["oj"] = "oji"; 337 map["om"] = "orm"; 338 map["or"] = "ori"; 339 map["os"] = "oss"; 340 map["pa"] = "pan"; 341 map["pi"] = "pli"; 342 map["pl"] = "pol"; 343 map["ps"] = "pus"; 344 map["pt"] = "por"; 345 map["qu"] = "que"; 346 map["rm"] = "roh"; 347 map["rn"] = "run"; 348 map["ro"] = "rum"; 349 map["ru"] = "rus"; 350 map["rw"] = "kin"; 351 map["sa"] = "san"; 352 map["sc"] = "srd"; 353 map["sd"] = "snd"; 354 map["se"] = "sme"; 355 map["sg"] = "sag"; 356 map["si"] = "sin"; 357 map["sk"] = "slo"; 358 map["sl"] = "slv"; 359 map["sm"] = "smo"; 360 map["sn"] = "sna"; 361 map["so"] = "som"; 362 map["sq"] = "alb"; 363 map["sr"] = "srp"; 364 map["ss"] = "ssw"; 365 map["st"] = "sot"; 366 map["su"] = "sun"; 367 map["sv"] = "swe"; 368 map["sw"] = "swa"; 369 map["ta"] = "tam"; 370 map["te"] = "tel"; 371 map["tg"] = "tgk"; 372 map["th"] = "tha"; 373 map["ti"] = "tir"; 374 map["tk"] = "tuk"; 375 map["tl"] = "tgl"; 376 map["tn"] = "tsn"; 377 map["to"] = "ton"; 378 map["tr"] = "tur"; 379 map["ts"] = "tso"; 380 map["tt"] = "tat"; 381 map["tw"] = "twi"; 382 map["ty"] = "tah"; 383 map["ug"] = "uig"; 384 map["uk"] = "ukr"; 385 map["ur"] = "urd"; 386 map["uz"] = "uzb"; 387 map["ve"] = "ven"; 388 map["vi"] = "vie"; 389 map["vo"] = "vol"; 390 map["wa"] = "wln"; 391 map["wo"] = "wol"; 392 map["xh"] = "xho"; 393 map["yi"] = "yid"; 394 map["yo"] = "yor"; 395 map["za"] = "zha"; 396 map["zh"] = "chi"; 397 map["zu"] = "zul"; 398 } 399 400 return map.contains(iso2Code) ? map[iso2Code] : QString(); 401 } 402 403 QString nameFromIso2(const QString & iso2Code)404LanguageCode::nameFromIso2(const QString &iso2Code) 405 { 406 QString name = QLocale::languageToString(QLocale(iso2Code).language()); 407 return name.isEmpty() ? i18n("Unknown") : name; 408 } 409 410 QString nameFromIso3(const QString & iso3Code)411LanguageCode::nameFromIso3(const QString &iso3Code) 412 { 413 return nameFromIso2(toIso2(iso3Code)); 414 } 415 416 /*static*/ QString nameFromIso(const QString & isoCode)417LanguageCode::nameFromIso(const QString &isoCode) 418 { 419 return nameFromIso2(isoCode.length() == 2 ? isoCode : toIso2(isoCode)); 420 } 421