├── .gitignore ├── Classes ├── Language.swift ├── Localizable.swift ├── LocalizedString.swift ├── Localizer.swift └── String+LocalizedString.swift ├── LICENSE ├── Localizer.podspec ├── Package.swift ├── README.md └── Tests ├── LinuxMain.swift └── LocalizerTests ├── LocalizerTests.swift └── XCTestManifests.swift /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.build 3 | /Packages 4 | /*.xcodeproj 5 | -------------------------------------------------------------------------------- /Classes/Language.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public enum Language: RawRepresentable, CustomStringConvertible { 4 | case af_NA 5 | case af_ZA 6 | case af 7 | case ak_GH 8 | case ak 9 | case sq_AL 10 | case sq 11 | case am_ET 12 | case am 13 | case ar_DZ 14 | case ar_BH 15 | case ar_EG 16 | case ar_IQ 17 | case ar_JO 18 | case ar_KW 19 | case ar_LB 20 | case ar_LY 21 | case ar_MA 22 | case ar_OM 23 | case ar_QA 24 | case ar_SA 25 | case ar_SD 26 | case ar_SY 27 | case ar_TN 28 | case ar_AE 29 | case ar_YE 30 | case ar 31 | case hy_AM 32 | case hy 33 | case as_IN 34 | case `as` 35 | case asa_TZ 36 | case asa 37 | case az_Cyrl 38 | case az_Cyrl_AZ 39 | case az_Latn 40 | case az_Latn_AZ 41 | case az 42 | case bm_ML 43 | case bm 44 | case eu_ES 45 | case eu 46 | case be_BY 47 | case be 48 | case bem_ZM 49 | case bem 50 | case bez_TZ 51 | case bez 52 | case bn_BD 53 | case bn_IN 54 | case bn 55 | case bs_BA 56 | case bs 57 | case bg_BG 58 | case bg 59 | case my_MM 60 | case my 61 | case yue_Hant_HK 62 | case ca_ES 63 | case ca 64 | case tzm_Latn 65 | case tzm_Latn_MA 66 | case tzm 67 | case chr_US 68 | case chr 69 | case cgg_UG 70 | case cgg 71 | case zh_Hans 72 | case zh_Hans_CN 73 | case zh_Hans_HK 74 | case zh_Hans_MO 75 | case zh_Hans_SG 76 | case zh_Hant 77 | case zh_Hant_HK 78 | case zh_Hant_MO 79 | case zh_Hant_TW 80 | case zh 81 | case kw_GB 82 | case kw 83 | case hr_HR 84 | case hr 85 | case cs_CZ 86 | case cs 87 | case da_DK 88 | case da 89 | case nl_BE 90 | case nl_NL 91 | case nl 92 | case ebu_KE 93 | case ebu 94 | case en_AS 95 | case en_AU 96 | case en_BE 97 | case en_BZ 98 | case en_BW 99 | case en_CA 100 | case en_GU 101 | case en_HK 102 | case en_IN 103 | case en_IE 104 | case en_IL 105 | case en_JM 106 | case en_MT 107 | case en_MH 108 | case en_MU 109 | case en_NA 110 | case en_NZ 111 | case en_MP 112 | case en_PK 113 | case en_PH 114 | case en_SG 115 | case en_ZA 116 | case en_TT 117 | case en_UM 118 | case en_VI 119 | case en_GB 120 | case en_US 121 | case en_ZW 122 | case en 123 | case eo 124 | case et_EE 125 | case et 126 | case ee_GH 127 | case ee_TG 128 | case ee 129 | case fo_FO 130 | case fo 131 | case fil_PH 132 | case fil 133 | case fi_FI 134 | case fi 135 | case fr_BE 136 | case fr_BJ 137 | case fr_BF 138 | case fr_BI 139 | case fr_CM 140 | case fr_CA 141 | case fr_CF 142 | case fr_TD 143 | case fr_KM 144 | case fr_CG 145 | case fr_CD 146 | case fr_CI 147 | case fr_DJ 148 | case fr_GQ 149 | case fr_FR 150 | case fr_GA 151 | case fr_GP 152 | case fr_GN 153 | case fr_LU 154 | case fr_MG 155 | case fr_ML 156 | case fr_MQ 157 | case fr_MC 158 | case fr_NE 159 | case fr_RW 160 | case fr_RE 161 | case fr_BL 162 | case fr_MF 163 | case fr_SN 164 | case fr_CH 165 | case fr_TG 166 | case fr 167 | case ff_SN 168 | case ff 169 | case gl_ES 170 | case gl 171 | case lg_UG 172 | case lg 173 | case ka_GE 174 | case ka 175 | case de_AT 176 | case de_BE 177 | case de_DE 178 | case de_LI 179 | case de_LU 180 | case de_CH 181 | case de 182 | case el_CY 183 | case el_GR 184 | case el 185 | case gu_IN 186 | case gu 187 | case guz_KE 188 | case guz 189 | case ha_Latn 190 | case ha_Latn_GH 191 | case ha_Latn_NE 192 | case ha_Latn_NG 193 | case ha 194 | case haw_US 195 | case haw 196 | case he_IL 197 | case he 198 | case hi_IN 199 | case hi 200 | case hu_HU 201 | case hu 202 | case is_IS 203 | case `is` 204 | case ig_NG 205 | case ig 206 | case id_ID 207 | case id 208 | case ga_IE 209 | case ga 210 | case it_IT 211 | case it_CH 212 | case it 213 | case ja_JP 214 | case ja 215 | case kea_CV 216 | case kea 217 | case kab_DZ 218 | case kab 219 | case kl_GL 220 | case kl 221 | case kln_KE 222 | case kln 223 | case kam_KE 224 | case kam 225 | case kn_IN 226 | case kn 227 | case kk_Cyrl 228 | case kk_Cyrl_KZ 229 | case kk 230 | case km_KH 231 | case km 232 | case ki_KE 233 | case ki 234 | case rw_RW 235 | case rw 236 | case kok_IN 237 | case kok 238 | case ko_KR 239 | case ko 240 | case khq_ML 241 | case khq 242 | case ses_ML 243 | case ses 244 | case lag_TZ 245 | case lag 246 | case lv_LV 247 | case lv 248 | case lt_LT 249 | case lt 250 | case luo_KE 251 | case luo 252 | case luy_KE 253 | case luy 254 | case mk_MK 255 | case mk 256 | case jmc_TZ 257 | case jmc 258 | case kde_TZ 259 | case kde 260 | case mg_MG 261 | case mg 262 | case ms_BN 263 | case ms_MY 264 | case ms 265 | case ml_IN 266 | case ml 267 | case mt_MT 268 | case mt 269 | case gv_GB 270 | case gv 271 | case mr_IN 272 | case mr 273 | case mas_KE 274 | case mas_TZ 275 | case mas 276 | case mer_KE 277 | case mer 278 | case mfe_MU 279 | case mfe 280 | case naq_NA 281 | case naq 282 | case ne_IN 283 | case ne_NP 284 | case ne 285 | case nd_ZW 286 | case nd 287 | case nb_NO 288 | case nb 289 | case nn_NO 290 | case nn 291 | case nyn_UG 292 | case nyn 293 | case or_IN 294 | case or 295 | case om_ET 296 | case om_KE 297 | case om 298 | case ps_AF 299 | case ps 300 | case fa_AF 301 | case fa_IR 302 | case fa 303 | case pl_PL 304 | case pl 305 | case pt_BR 306 | case pt_GW 307 | case pt_MZ 308 | case pt_PT 309 | case pt 310 | case pa_Arab 311 | case pa_Arab_PK 312 | case pa_Guru 313 | case pa_Guru_IN 314 | case pa 315 | case ro_MD 316 | case ro_RO 317 | case ro 318 | case rm_CH 319 | case rm 320 | case rof_TZ 321 | case rof 322 | case ru_MD 323 | case ru_RU 324 | case ru_UA 325 | case ru 326 | case rwk_TZ 327 | case rwk 328 | case saq_KE 329 | case saq 330 | case sg_CF 331 | case sg 332 | case seh_MZ 333 | case seh 334 | case sr_Cyrl 335 | case sr_Cyrl_BA 336 | case sr_Cyrl_ME 337 | case sr_Cyrl_RS 338 | case sr_Latn 339 | case sr_Latn_BA 340 | case sr_Latn_ME 341 | case sr_Latn_RS 342 | case sr 343 | case sn_ZW 344 | case sn 345 | case ii_CN 346 | case ii 347 | case si_LK 348 | case si 349 | case sk_SK 350 | case sk 351 | case sl_SI 352 | case sl 353 | case xog_UG 354 | case xog 355 | case so_DJ 356 | case so_ET 357 | case so_KE 358 | case so_SO 359 | case so 360 | case es_AR 361 | case es_BO 362 | case es_CL 363 | case es_CO 364 | case es_CR 365 | case es_DO 366 | case es_EC 367 | case es_SV 368 | case es_GQ 369 | case es_GT 370 | case es_HN 371 | case es_419 372 | case es_MX 373 | case es_NI 374 | case es_PA 375 | case es_PY 376 | case es_PE 377 | case es_PR 378 | case es_ES 379 | case es_US 380 | case es_UY 381 | case es_VE 382 | case es 383 | case sw_KE 384 | case sw_TZ 385 | case sw 386 | case sv_FI 387 | case sv_SE 388 | case sv 389 | case gsw_CH 390 | case gsw 391 | case shi_Latn 392 | case shi_Latn_MA 393 | case shi_Tfng 394 | case shi_Tfng_MA 395 | case shi 396 | case dav_KE 397 | case dav 398 | case ta_IN 399 | case ta_LK 400 | case ta 401 | case te_IN 402 | case te 403 | case teo_KE 404 | case teo_UG 405 | case teo 406 | case th_TH 407 | case th 408 | case bo_CN 409 | case bo_IN 410 | case bo 411 | case ti_ER 412 | case ti_ET 413 | case ti 414 | case to_TO 415 | case to 416 | case tr_TR 417 | case tr 418 | case uk_UA 419 | case uk 420 | case ur_IN 421 | case ur_PK 422 | case ur 423 | case uz_Arab 424 | case uz_Arab_AF 425 | case uz_Cyrl 426 | case uz_Cyrl_UZ 427 | case uz_Latn 428 | case uz_Latn_UZ 429 | case uz 430 | case vi_VN 431 | case vi 432 | case vun_TZ 433 | case vun 434 | case cy_GB 435 | case cy 436 | case yo_NG 437 | case yo 438 | case zu_ZA 439 | case zu 440 | 441 | public init?(rawValue: String) { 442 | switch rawValue { 443 | case "af_NA": self = .af_NA 444 | case "af_ZA": self = .af_ZA 445 | case "af": self = .af 446 | case "ak_GH": self = .ak_GH 447 | case "ak": self = .ak 448 | case "sq_AL": self = .sq_AL 449 | case "sq": self = .sq 450 | case "am_ET": self = .am_ET 451 | case "am": self = .am 452 | case "ar_DZ": self = .ar_DZ 453 | case "ar_BH": self = .ar_BH 454 | case "ar_EG": self = .ar_EG 455 | case "ar_IQ": self = .ar_IQ 456 | case "ar_JO": self = .ar_JO 457 | case "ar_KW": self = .ar_KW 458 | case "ar_LB": self = .ar_LB 459 | case "ar_LY": self = .ar_LY 460 | case "ar_MA": self = .ar_MA 461 | case "ar_OM": self = .ar_OM 462 | case "ar_QA": self = .ar_QA 463 | case "ar_SA": self = .ar_SA 464 | case "ar_SD": self = .ar_SD 465 | case "ar_SY": self = .ar_SY 466 | case "ar_TN": self = .ar_TN 467 | case "ar_AE": self = .ar_AE 468 | case "ar_YE": self = .ar_YE 469 | case "ar": self = .ar 470 | case "hy_AM": self = .hy_AM 471 | case "hy": self = .hy 472 | case "as_IN": self = .as_IN 473 | case "as": self = .as 474 | case "asa_TZ": self = .asa_TZ 475 | case "asa": self = .asa 476 | case "az_Cyrl": self = .az_Cyrl 477 | case "az_Cyrl_AZ": self = .az_Cyrl_AZ 478 | case "az_Latn": self = .az_Latn 479 | case "az_Latn_AZ": self = .az_Latn_AZ 480 | case "az": self = .az 481 | case "bm_ML": self = .bm_ML 482 | case "bm": self = .bm 483 | case "eu_ES": self = .eu_ES 484 | case "eu": self = .eu 485 | case "be_BY": self = .be_BY 486 | case "be": self = .be 487 | case "bem_ZM": self = .bem_ZM 488 | case "bem": self = .bem 489 | case "bez_TZ": self = .bez_TZ 490 | case "bez": self = .bez 491 | case "bn_BD": self = .bn_BD 492 | case "bn_IN": self = .bn_IN 493 | case "bn": self = .bn 494 | case "bs_BA": self = .bs_BA 495 | case "bs": self = .bs 496 | case "bg_BG": self = .bg_BG 497 | case "bg": self = .bg 498 | case "my_MM": self = .my_MM 499 | case "my": self = .my 500 | case "yue_Hant_HK": self = .yue_Hant_HK 501 | case "ca_ES": self = .ca_ES 502 | case "ca": self = .ca 503 | case "tzm_Latn": self = .tzm_Latn 504 | case "tzm_Latn_MA": self = .tzm_Latn_MA 505 | case "tzm": self = .tzm 506 | case "chr_US": self = .chr_US 507 | case "chr": self = .chr 508 | case "cgg_UG": self = .cgg_UG 509 | case "cgg": self = .cgg 510 | case "zh_Hans": self = .zh_Hans 511 | case "zh_Hans_CN": self = .zh_Hans_CN 512 | case "zh_Hans_HK": self = .zh_Hans_HK 513 | case "zh_Hans_MO": self = .zh_Hans_MO 514 | case "zh_Hans_SG": self = .zh_Hans_SG 515 | case "zh_Hant": self = .zh_Hant 516 | case "zh_Hant_HK": self = .zh_Hant_HK 517 | case "zh_Hant_MO": self = .zh_Hant_MO 518 | case "zh_Hant_TW": self = .zh_Hant_TW 519 | case "zh": self = .zh 520 | case "kw_GB": self = .kw_GB 521 | case "kw": self = .kw 522 | case "hr_HR": self = .hr_HR 523 | case "hr": self = .hr 524 | case "cs_CZ": self = .cs_CZ 525 | case "cs": self = .cs 526 | case "da_DK": self = .da_DK 527 | case "da": self = .da 528 | case "nl_BE": self = .nl_BE 529 | case "nl_NL": self = .nl_NL 530 | case "nl": self = .nl 531 | case "ebu_KE": self = .ebu_KE 532 | case "ebu": self = .ebu 533 | case "en_AS": self = .en_AS 534 | case "en_AU": self = .en_AU 535 | case "en_BE": self = .en_BE 536 | case "en_BZ": self = .en_BZ 537 | case "en_BW": self = .en_BW 538 | case "en_CA": self = .en_CA 539 | case "en_GU": self = .en_GU 540 | case "en_HK": self = .en_HK 541 | case "en_IN": self = .en_IN 542 | case "en_IE": self = .en_IE 543 | case "en_IL": self = .en_IL 544 | case "en_JM": self = .en_JM 545 | case "en_MT": self = .en_MT 546 | case "en_MH": self = .en_MH 547 | case "en_MU": self = .en_MU 548 | case "en_NA": self = .en_NA 549 | case "en_NZ": self = .en_NZ 550 | case "en_MP": self = .en_MP 551 | case "en_PK": self = .en_PK 552 | case "en_PH": self = .en_PH 553 | case "en_SG": self = .en_SG 554 | case "en_ZA": self = .en_ZA 555 | case "en_TT": self = .en_TT 556 | case "en_UM": self = .en_UM 557 | case "en_VI": self = .en_VI 558 | case "en_GB": self = .en_GB 559 | case "en_US": self = .en_US 560 | case "en_ZW": self = .en_ZW 561 | case "en": self = .en 562 | case "eo": self = .eo 563 | case "et_EE": self = .et_EE 564 | case "et": self = .et 565 | case "ee_GH": self = .ee_GH 566 | case "ee_TG": self = .ee_TG 567 | case "ee": self = .ee 568 | case "fo_FO": self = .fo_FO 569 | case "fo": self = .fo 570 | case "fil_PH": self = .fil_PH 571 | case "fil": self = .fil 572 | case "fi_FI": self = .fi_FI 573 | case "fi": self = .fi 574 | case "fr_BE": self = .fr_BE 575 | case "fr_BJ": self = .fr_BJ 576 | case "fr_BF": self = .fr_BF 577 | case "fr_BI": self = .fr_BI 578 | case "fr_CM": self = .fr_CM 579 | case "fr_CA": self = .fr_CA 580 | case "fr_CF": self = .fr_CF 581 | case "fr_TD": self = .fr_TD 582 | case "fr_KM": self = .fr_KM 583 | case "fr_CG": self = .fr_CG 584 | case "fr_CD": self = .fr_CD 585 | case "fr_CI": self = .fr_CI 586 | case "fr_DJ": self = .fr_DJ 587 | case "fr_GQ": self = .fr_GQ 588 | case "fr_FR": self = .fr_FR 589 | case "fr_GA": self = .fr_GA 590 | case "fr_GP": self = .fr_GP 591 | case "fr_GN": self = .fr_GN 592 | case "fr_LU": self = .fr_LU 593 | case "fr_MG": self = .fr_MG 594 | case "fr_ML": self = .fr_ML 595 | case "fr_MQ": self = .fr_MQ 596 | case "fr_MC": self = .fr_MC 597 | case "fr_NE": self = .fr_NE 598 | case "fr_RW": self = .fr_RW 599 | case "fr_RE": self = .fr_RE 600 | case "fr_BL": self = .fr_BL 601 | case "fr_MF": self = .fr_MF 602 | case "fr_SN": self = .fr_SN 603 | case "fr_CH": self = .fr_CH 604 | case "fr_TG": self = .fr_TG 605 | case "fr": self = .fr 606 | case "ff_SN": self = .ff_SN 607 | case "ff": self = .ff 608 | case "gl_ES": self = .gl_ES 609 | case "gl": self = .gl 610 | case "lg_UG": self = .lg_UG 611 | case "lg": self = .lg 612 | case "ka_GE": self = .ka_GE 613 | case "ka": self = .ka 614 | case "de_AT": self = .de_AT 615 | case "de_BE": self = .de_BE 616 | case "de_DE": self = .de_DE 617 | case "de_LI": self = .de_LI 618 | case "de_LU": self = .de_LU 619 | case "de_CH": self = .de_CH 620 | case "de": self = .de 621 | case "el_CY": self = .el_CY 622 | case "el_GR": self = .el_GR 623 | case "el": self = .el 624 | case "gu_IN": self = .gu_IN 625 | case "gu": self = .gu 626 | case "guz_KE": self = .guz_KE 627 | case "guz": self = .guz 628 | case "ha_Latn": self = .ha_Latn 629 | case "ha_Latn_GH": self = .ha_Latn_GH 630 | case "ha_Latn_NE": self = .ha_Latn_NE 631 | case "ha_Latn_NG": self = .ha_Latn_NG 632 | case "ha": self = .ha 633 | case "haw_US": self = .haw_US 634 | case "haw": self = .haw 635 | case "he_IL": self = .he_IL 636 | case "he": self = .he 637 | case "hi_IN": self = .hi_IN 638 | case "hi": self = .hi 639 | case "hu_HU": self = .hu_HU 640 | case "hu": self = .hu 641 | case "is_IS": self = .is_IS 642 | case "is": self = .is 643 | case "ig_NG": self = .ig_NG 644 | case "ig": self = .ig 645 | case "id_ID": self = .id_ID 646 | case "id": self = .id 647 | case "ga_IE": self = .ga_IE 648 | case "ga": self = .ga 649 | case "it_IT": self = .it_IT 650 | case "it_CH": self = .it_CH 651 | case "it": self = .it 652 | case "ja_JP": self = .ja_JP 653 | case "ja": self = .ja 654 | case "kea_CV": self = .kea_CV 655 | case "kea": self = .kea 656 | case "kab_DZ": self = .kab_DZ 657 | case "kab": self = .kab 658 | case "kl_GL": self = .kl_GL 659 | case "kl": self = .kl 660 | case "kln_KE": self = .kln_KE 661 | case "kln": self = .kln 662 | case "kam_KE": self = .kam_KE 663 | case "kam": self = .kam 664 | case "kn_IN": self = .kn_IN 665 | case "kn": self = .kn 666 | case "kk_Cyrl": self = .kk_Cyrl 667 | case "kk_Cyrl_KZ": self = .kk_Cyrl_KZ 668 | case "kk": self = .kk 669 | case "km_KH": self = .km_KH 670 | case "km": self = .km 671 | case "ki_KE": self = .ki_KE 672 | case "ki": self = .ki 673 | case "rw_RW": self = .rw_RW 674 | case "rw": self = .rw 675 | case "kok_IN": self = .kok_IN 676 | case "kok": self = .kok 677 | case "ko_KR": self = .ko_KR 678 | case "ko": self = .ko 679 | case "khq_ML": self = .khq_ML 680 | case "khq": self = .khq 681 | case "ses_ML": self = .ses_ML 682 | case "ses": self = .ses 683 | case "lag_TZ": self = .lag_TZ 684 | case "lag": self = .lag 685 | case "lv_LV": self = .lv_LV 686 | case "lv": self = .lv 687 | case "lt_LT": self = .lt_LT 688 | case "lt": self = .lt 689 | case "luo_KE": self = .luo_KE 690 | case "luo": self = .luo 691 | case "luy_KE": self = .luy_KE 692 | case "luy": self = .luy 693 | case "mk_MK": self = .mk_MK 694 | case "mk": self = .mk 695 | case "jmc_TZ": self = .jmc_TZ 696 | case "jmc": self = .jmc 697 | case "kde_TZ": self = .kde_TZ 698 | case "kde": self = .kde 699 | case "mg_MG": self = .mg_MG 700 | case "mg": self = .mg 701 | case "ms_BN": self = .ms_BN 702 | case "ms_MY": self = .ms_MY 703 | case "ms": self = .ms 704 | case "ml_IN": self = .ml_IN 705 | case "ml": self = .ml 706 | case "mt_MT": self = .mt_MT 707 | case "mt": self = .mt 708 | case "gv_GB": self = .gv_GB 709 | case "gv": self = .gv 710 | case "mr_IN": self = .mr_IN 711 | case "mr": self = .mr 712 | case "mas_KE": self = .mas_KE 713 | case "mas_TZ": self = .mas_TZ 714 | case "mas": self = .mas 715 | case "mer_KE": self = .mer_KE 716 | case "mer": self = .mer 717 | case "mfe_MU": self = .mfe_MU 718 | case "mfe": self = .mfe 719 | case "naq_NA": self = .naq_NA 720 | case "naq": self = .naq 721 | case "ne_IN": self = .ne_IN 722 | case "ne_NP": self = .ne_NP 723 | case "ne": self = .ne 724 | case "nd_ZW": self = .nd_ZW 725 | case "nd": self = .nd 726 | case "nb_NO": self = .nb_NO 727 | case "nb": self = .nb 728 | case "nn_NO": self = .nn_NO 729 | case "nn": self = .nn 730 | case "nyn_UG": self = .nyn_UG 731 | case "nyn": self = .nyn 732 | case "or_IN": self = .or_IN 733 | case "or": self = .or 734 | case "om_ET": self = .om_ET 735 | case "om_KE": self = .om_KE 736 | case "om": self = .om 737 | case "ps_AF": self = .ps_AF 738 | case "ps": self = .ps 739 | case "fa_AF": self = .fa_AF 740 | case "fa_IR": self = .fa_IR 741 | case "fa": self = .fa 742 | case "pl_PL": self = .pl_PL 743 | case "pl": self = .pl 744 | case "pt_BR": self = .pt_BR 745 | case "pt_GW": self = .pt_GW 746 | case "pt_MZ": self = .pt_MZ 747 | case "pt_PT": self = .pt_PT 748 | case "pt": self = .pt 749 | case "pa_Arab": self = .pa_Arab 750 | case "pa_Arab_PK": self = .pa_Arab_PK 751 | case "pa_Guru": self = .pa_Guru 752 | case "pa_Guru_IN": self = .pa_Guru_IN 753 | case "pa": self = .pa 754 | case "ro_MD": self = .ro_MD 755 | case "ro_RO": self = .ro_RO 756 | case "ro": self = .ro 757 | case "rm_CH": self = .rm_CH 758 | case "rm": self = .rm 759 | case "rof_TZ": self = .rof_TZ 760 | case "rof": self = .rof 761 | case "ru_MD": self = .ru_MD 762 | case "ru_RU": self = .ru_RU 763 | case "ru_UA": self = .ru_UA 764 | case "ru": self = .ru 765 | case "rwk_TZ": self = .rwk_TZ 766 | case "rwk": self = .rwk 767 | case "saq_KE": self = .saq_KE 768 | case "saq": self = .saq 769 | case "sg_CF": self = .sg_CF 770 | case "sg": self = .sg 771 | case "seh_MZ": self = .seh_MZ 772 | case "seh": self = .seh 773 | case "sr_Cyrl": self = .sr_Cyrl 774 | case "sr_Cyrl_BA": self = .sr_Cyrl_BA 775 | case "sr_Cyrl_ME": self = .sr_Cyrl_ME 776 | case "sr_Cyrl_RS": self = .sr_Cyrl_RS 777 | case "sr_Latn": self = .sr_Latn 778 | case "sr_Latn_BA": self = .sr_Latn_BA 779 | case "sr_Latn_ME": self = .sr_Latn_ME 780 | case "sr_Latn_RS": self = .sr_Latn_RS 781 | case "sr": self = .sr 782 | case "sn_ZW": self = .sn_ZW 783 | case "sn": self = .sn 784 | case "ii_CN": self = .ii_CN 785 | case "ii": self = .ii 786 | case "si_LK": self = .si_LK 787 | case "si": self = .si 788 | case "sk_SK": self = .sk_SK 789 | case "sk": self = .sk 790 | case "sl_SI": self = .sl_SI 791 | case "sl": self = .sl 792 | case "xog_UG": self = .xog_UG 793 | case "xog": self = .xog 794 | case "so_DJ": self = .so_DJ 795 | case "so_ET": self = .so_ET 796 | case "so_KE": self = .so_KE 797 | case "so_SO": self = .so_SO 798 | case "so": self = .so 799 | case "es_AR": self = .es_AR 800 | case "es_BO": self = .es_BO 801 | case "es_CL": self = .es_CL 802 | case "es_CO": self = .es_CO 803 | case "es_CR": self = .es_CR 804 | case "es_DO": self = .es_DO 805 | case "es_EC": self = .es_EC 806 | case "es_SV": self = .es_SV 807 | case "es_GQ": self = .es_GQ 808 | case "es_GT": self = .es_GT 809 | case "es_HN": self = .es_HN 810 | case "es_419": self = .es_419 811 | case "es_MX": self = .es_MX 812 | case "es_NI": self = .es_NI 813 | case "es_PA": self = .es_PA 814 | case "es_PY": self = .es_PY 815 | case "es_PE": self = .es_PE 816 | case "es_PR": self = .es_PR 817 | case "es_ES": self = .es_ES 818 | case "es_US": self = .es_US 819 | case "es_UY": self = .es_UY 820 | case "es_VE": self = .es_VE 821 | case "es": self = .es 822 | case "sw_KE": self = .sw_KE 823 | case "sw_TZ": self = .sw_TZ 824 | case "sw": self = .sw 825 | case "sv_FI": self = .sv_FI 826 | case "sv_SE": self = .sv_SE 827 | case "sv": self = .sv 828 | case "gsw_CH": self = .gsw_CH 829 | case "gsw": self = .gsw 830 | case "shi_Latn": self = .shi_Latn 831 | case "shi_Latn_MA": self = .shi_Latn_MA 832 | case "shi_Tfng": self = .shi_Tfng 833 | case "shi_Tfng_MA": self = .shi_Tfng_MA 834 | case "shi": self = .shi 835 | case "dav_KE": self = .dav_KE 836 | case "dav": self = .dav 837 | case "ta_IN": self = .ta_IN 838 | case "ta_LK": self = .ta_LK 839 | case "ta": self = .ta 840 | case "te_IN": self = .te_IN 841 | case "te": self = .te 842 | case "teo_KE": self = .teo_KE 843 | case "teo_UG": self = .teo_UG 844 | case "teo": self = .teo 845 | case "th_TH": self = .th_TH 846 | case "th": self = .th 847 | case "bo_CN": self = .bo_CN 848 | case "bo_IN": self = .bo_IN 849 | case "bo": self = .bo 850 | case "ti_ER": self = .ti_ER 851 | case "ti_ET": self = .ti_ET 852 | case "ti": self = .ti 853 | case "to_TO": self = .to_TO 854 | case "to": self = .to 855 | case "tr_TR": self = .tr_TR 856 | case "tr": self = .tr 857 | case "uk_UA": self = .uk_UA 858 | case "uk": self = .uk 859 | case "ur_IN": self = .ur_IN 860 | case "ur_PK": self = .ur_PK 861 | case "ur": self = .ur 862 | case "uz_Arab": self = .uz_Arab 863 | case "uz_Arab_AF": self = .uz_Arab_AF 864 | case "uz_Cyrl": self = .uz_Cyrl 865 | case "uz_Cyrl_UZ": self = .uz_Cyrl_UZ 866 | case "uz_Latn": self = .uz_Latn 867 | case "uz_Latn_UZ": self = .uz_Latn_UZ 868 | case "uz": self = .uz 869 | case "vi_VN": self = .vi_VN 870 | case "vi": self = .vi 871 | case "vun_TZ": self = .vun_TZ 872 | case "vun": self = .vun 873 | case "cy_GB": self = .cy_GB 874 | case "cy": self = .cy 875 | case "yo_NG": self = .yo_NG 876 | case "yo": self = .yo 877 | case "zu_ZA": self = .zu_ZA 878 | case "zu": self = .zu 879 | default: return nil 880 | } 881 | } 882 | 883 | public var rawValue: String { 884 | switch self { 885 | case .af_NA: return "af_NA" 886 | case .af_ZA: return "af_ZA" 887 | case .af: return "af" 888 | case .ak_GH: return "ak_GH" 889 | case .ak: return "ak" 890 | case .sq_AL: return "sq_AL" 891 | case .sq: return "sq" 892 | case .am_ET: return "am_ET" 893 | case .am: return "am" 894 | case .ar_DZ: return "ar_DZ" 895 | case .ar_BH: return "ar_BH" 896 | case .ar_EG: return "ar_EG" 897 | case .ar_IQ: return "ar_IQ" 898 | case .ar_JO: return "ar_JO" 899 | case .ar_KW: return "ar_KW" 900 | case .ar_LB: return "ar_LB" 901 | case .ar_LY: return "ar_LY" 902 | case .ar_MA: return "ar_MA" 903 | case .ar_OM: return "ar_OM" 904 | case .ar_QA: return "ar_QA" 905 | case .ar_SA: return "ar_SA" 906 | case .ar_SD: return "ar_SD" 907 | case .ar_SY: return "ar_SY" 908 | case .ar_TN: return "ar_TN" 909 | case .ar_AE: return "ar_AE" 910 | case .ar_YE: return "ar_YE" 911 | case .ar: return "ar" 912 | case .hy_AM: return "hy_AM" 913 | case .hy: return "hy" 914 | case .as_IN: return "as_IN" 915 | case .as: return "as" 916 | case .asa_TZ: return "asa_TZ" 917 | case .asa: return "asa" 918 | case .az_Cyrl: return "az_Cyrl" 919 | case .az_Cyrl_AZ: return "az_Cyrl_AZ" 920 | case .az_Latn: return "az_Latn" 921 | case .az_Latn_AZ: return "az_Latn_AZ" 922 | case .az: return "az" 923 | case .bm_ML: return "bm_ML" 924 | case .bm: return "bm" 925 | case .eu_ES: return "eu_ES" 926 | case .eu: return "eu" 927 | case .be_BY: return "be_BY" 928 | case .be: return "be" 929 | case .bem_ZM: return "bem_ZM" 930 | case .bem: return "bem" 931 | case .bez_TZ: return "bez_TZ" 932 | case .bez: return "bez" 933 | case .bn_BD: return "bn_BD" 934 | case .bn_IN: return "bn_IN" 935 | case .bn: return "bn" 936 | case .bs_BA: return "bs_BA" 937 | case .bs: return "bs" 938 | case .bg_BG: return "bg_BG" 939 | case .bg: return "bg" 940 | case .my_MM: return "my_MM" 941 | case .my: return "my" 942 | case .yue_Hant_HK: return "yue_Hant_HK" 943 | case .ca_ES: return "ca_ES" 944 | case .ca: return "ca" 945 | case .tzm_Latn: return "tzm_Latn" 946 | case .tzm_Latn_MA: return "tzm_Latn_MA" 947 | case .tzm: return "tzm" 948 | case .chr_US: return "chr_US" 949 | case .chr: return "chr" 950 | case .cgg_UG: return "cgg_UG" 951 | case .cgg: return "cgg" 952 | case .zh_Hans: return "zh_Hans" 953 | case .zh_Hans_CN: return "zh_Hans_CN" 954 | case .zh_Hans_HK: return "zh_Hans_HK" 955 | case .zh_Hans_MO: return "zh_Hans_MO" 956 | case .zh_Hans_SG: return "zh_Hans_SG" 957 | case .zh_Hant: return "zh_Hant" 958 | case .zh_Hant_HK: return "zh_Hant_HK" 959 | case .zh_Hant_MO: return "zh_Hant_MO" 960 | case .zh_Hant_TW: return "zh_Hant_TW" 961 | case .zh: return "zh" 962 | case .kw_GB: return "kw_GB" 963 | case .kw: return "kw" 964 | case .hr_HR: return "hr_HR" 965 | case .hr: return "hr" 966 | case .cs_CZ: return "cs_CZ" 967 | case .cs: return "cs" 968 | case .da_DK: return "da_DK" 969 | case .da: return "da" 970 | case .nl_BE: return "nl_BE" 971 | case .nl_NL: return "nl_NL" 972 | case .nl: return "nl" 973 | case .ebu_KE: return "ebu_KE" 974 | case .ebu: return "ebu" 975 | case .en_AS: return "en_AS" 976 | case .en_AU: return "en_AU" 977 | case .en_BE: return "en_BE" 978 | case .en_BZ: return "en_BZ" 979 | case .en_BW: return "en_BW" 980 | case .en_CA: return "en_CA" 981 | case .en_GU: return "en_GU" 982 | case .en_HK: return "en_HK" 983 | case .en_IN: return "en_IN" 984 | case .en_IE: return "en_IE" 985 | case .en_IL: return "en_IL" 986 | case .en_JM: return "en_JM" 987 | case .en_MT: return "en_MT" 988 | case .en_MH: return "en_MH" 989 | case .en_MU: return "en_MU" 990 | case .en_NA: return "en_NA" 991 | case .en_NZ: return "en_NZ" 992 | case .en_MP: return "en_MP" 993 | case .en_PK: return "en_PK" 994 | case .en_PH: return "en_PH" 995 | case .en_SG: return "en_SG" 996 | case .en_ZA: return "en_ZA" 997 | case .en_TT: return "en_TT" 998 | case .en_UM: return "en_UM" 999 | case .en_VI: return "en_VI" 1000 | case .en_GB: return "en_GB" 1001 | case .en_US: return "en_US" 1002 | case .en_ZW: return "en_ZW" 1003 | case .en: return "en" 1004 | case .eo: return "eo" 1005 | case .et_EE: return "et_EE" 1006 | case .et: return "et" 1007 | case .ee_GH: return "ee_GH" 1008 | case .ee_TG: return "ee_TG" 1009 | case .ee: return "ee" 1010 | case .fo_FO: return "fo_FO" 1011 | case .fo: return "fo" 1012 | case .fil_PH: return "fil_PH" 1013 | case .fil: return "fil" 1014 | case .fi_FI: return "fi_FI" 1015 | case .fi: return "fi" 1016 | case .fr_BE: return "fr_BE" 1017 | case .fr_BJ: return "fr_BJ" 1018 | case .fr_BF: return "fr_BF" 1019 | case .fr_BI: return "fr_BI" 1020 | case .fr_CM: return "fr_CM" 1021 | case .fr_CA: return "fr_CA" 1022 | case .fr_CF: return "fr_CF" 1023 | case .fr_TD: return "fr_TD" 1024 | case .fr_KM: return "fr_KM" 1025 | case .fr_CG: return "fr_CG" 1026 | case .fr_CD: return "fr_CD" 1027 | case .fr_CI: return "fr_CI" 1028 | case .fr_DJ: return "fr_DJ" 1029 | case .fr_GQ: return "fr_GQ" 1030 | case .fr_FR: return "fr_FR" 1031 | case .fr_GA: return "fr_GA" 1032 | case .fr_GP: return "fr_GP" 1033 | case .fr_GN: return "fr_GN" 1034 | case .fr_LU: return "fr_LU" 1035 | case .fr_MG: return "fr_MG" 1036 | case .fr_ML: return "fr_ML" 1037 | case .fr_MQ: return "fr_MQ" 1038 | case .fr_MC: return "fr_MC" 1039 | case .fr_NE: return "fr_NE" 1040 | case .fr_RW: return "fr_RW" 1041 | case .fr_RE: return "fr_RE" 1042 | case .fr_BL: return "fr_BL" 1043 | case .fr_MF: return "fr_MF" 1044 | case .fr_SN: return "fr_SN" 1045 | case .fr_CH: return "fr_CH" 1046 | case .fr_TG: return "fr_TG" 1047 | case .fr: return "fr" 1048 | case .ff_SN: return "ff_SN" 1049 | case .ff: return "ff" 1050 | case .gl_ES: return "gl_ES" 1051 | case .gl: return "gl" 1052 | case .lg_UG: return "lg_UG" 1053 | case .lg: return "lg" 1054 | case .ka_GE: return "ka_GE" 1055 | case .ka: return "ka" 1056 | case .de_AT: return "de_AT" 1057 | case .de_BE: return "de_BE" 1058 | case .de_DE: return "de_DE" 1059 | case .de_LI: return "de_LI" 1060 | case .de_LU: return "de_LU" 1061 | case .de_CH: return "de_CH" 1062 | case .de: return "de" 1063 | case .el_CY: return "el_CY" 1064 | case .el_GR: return "el_GR" 1065 | case .el: return "el" 1066 | case .gu_IN: return "gu_IN" 1067 | case .gu: return "gu" 1068 | case .guz_KE: return "guz_KE" 1069 | case .guz: return "guz" 1070 | case .ha_Latn: return "ha_Latn" 1071 | case .ha_Latn_GH: return "ha_Latn_GH" 1072 | case .ha_Latn_NE: return "ha_Latn_NE" 1073 | case .ha_Latn_NG: return "ha_Latn_NG" 1074 | case .ha: return "ha" 1075 | case .haw_US: return "haw_US" 1076 | case .haw: return "haw" 1077 | case .he_IL: return "he_IL" 1078 | case .he: return "he" 1079 | case .hi_IN: return "hi_IN" 1080 | case .hi: return "hi" 1081 | case .hu_HU: return "hu_HU" 1082 | case .hu: return "hu" 1083 | case .is_IS: return "is_IS" 1084 | case .is: return "is" 1085 | case .ig_NG: return "ig_NG" 1086 | case .ig: return "ig" 1087 | case .id_ID: return "id_ID" 1088 | case .id: return "id" 1089 | case .ga_IE: return "ga_IE" 1090 | case .ga: return "ga" 1091 | case .it_IT: return "it_IT" 1092 | case .it_CH: return "it_CH" 1093 | case .it: return "it" 1094 | case .ja_JP: return "ja_JP" 1095 | case .ja: return "ja" 1096 | case .kea_CV: return "kea_CV" 1097 | case .kea: return "kea" 1098 | case .kab_DZ: return "kab_DZ" 1099 | case .kab: return "kab" 1100 | case .kl_GL: return "kl_GL" 1101 | case .kl: return "kl" 1102 | case .kln_KE: return "kln_KE" 1103 | case .kln: return "kln" 1104 | case .kam_KE: return "kam_KE" 1105 | case .kam: return "kam" 1106 | case .kn_IN: return "kn_IN" 1107 | case .kn: return "kn" 1108 | case .kk_Cyrl: return "kk_Cyrl" 1109 | case .kk_Cyrl_KZ: return "kk_Cyrl_KZ" 1110 | case .kk: return "kk" 1111 | case .km_KH: return "km_KH" 1112 | case .km: return "km" 1113 | case .ki_KE: return "ki_KE" 1114 | case .ki: return "ki" 1115 | case .rw_RW: return "rw_RW" 1116 | case .rw: return "rw" 1117 | case .kok_IN: return "kok_IN" 1118 | case .kok: return "kok" 1119 | case .ko_KR: return "ko_KR" 1120 | case .ko: return "ko" 1121 | case .khq_ML: return "khq_ML" 1122 | case .khq: return "khq" 1123 | case .ses_ML: return "ses_ML" 1124 | case .ses: return "ses" 1125 | case .lag_TZ: return "lag_TZ" 1126 | case .lag: return "lag" 1127 | case .lv_LV: return "lv_LV" 1128 | case .lv: return "lv" 1129 | case .lt_LT: return "lt_LT" 1130 | case .lt: return "lt" 1131 | case .luo_KE: return "luo_KE" 1132 | case .luo: return "luo" 1133 | case .luy_KE: return "luy_KE" 1134 | case .luy: return "luy" 1135 | case .mk_MK: return "mk_MK" 1136 | case .mk: return "mk" 1137 | case .jmc_TZ: return "jmc_TZ" 1138 | case .jmc: return "jmc" 1139 | case .kde_TZ: return "kde_TZ" 1140 | case .kde: return "kde" 1141 | case .mg_MG: return "mg_MG" 1142 | case .mg: return "mg" 1143 | case .ms_BN: return "ms_BN" 1144 | case .ms_MY: return "ms_MY" 1145 | case .ms: return "ms" 1146 | case .ml_IN: return "ml_IN" 1147 | case .ml: return "ml" 1148 | case .mt_MT: return "mt_MT" 1149 | case .mt: return "mt" 1150 | case .gv_GB: return "gv_GB" 1151 | case .gv: return "gv" 1152 | case .mr_IN: return "mr_IN" 1153 | case .mr: return "mr" 1154 | case .mas_KE: return "mas_KE" 1155 | case .mas_TZ: return "mas_TZ" 1156 | case .mas: return "mas" 1157 | case .mer_KE: return "mer_KE" 1158 | case .mer: return "mer" 1159 | case .mfe_MU: return "mfe_MU" 1160 | case .mfe: return "mfe" 1161 | case .naq_NA: return "naq_NA" 1162 | case .naq: return "naq" 1163 | case .ne_IN: return "ne_IN" 1164 | case .ne_NP: return "ne_NP" 1165 | case .ne: return "ne" 1166 | case .nd_ZW: return "nd_ZW" 1167 | case .nd: return "nd" 1168 | case .nb_NO: return "nb_NO" 1169 | case .nb: return "nb" 1170 | case .nn_NO: return "nn_NO" 1171 | case .nn: return "nn" 1172 | case .nyn_UG: return "nyn_UG" 1173 | case .nyn: return "nyn" 1174 | case .or_IN: return "or_IN" 1175 | case .or: return "or" 1176 | case .om_ET: return "om_ET" 1177 | case .om_KE: return "om_KE" 1178 | case .om: return "om" 1179 | case .ps_AF: return "ps_AF" 1180 | case .ps: return "ps" 1181 | case .fa_AF: return "fa_AF" 1182 | case .fa_IR: return "fa_IR" 1183 | case .fa: return "fa" 1184 | case .pl_PL: return "pl_PL" 1185 | case .pl: return "pl" 1186 | case .pt_BR: return "pt_BR" 1187 | case .pt_GW: return "pt_GW" 1188 | case .pt_MZ: return "pt_MZ" 1189 | case .pt_PT: return "pt_PT" 1190 | case .pt: return "pt" 1191 | case .pa_Arab: return "pa_Arab" 1192 | case .pa_Arab_PK: return "pa_Arab_PK" 1193 | case .pa_Guru: return "pa_Guru" 1194 | case .pa_Guru_IN: return "pa_Guru_IN" 1195 | case .pa: return "pa" 1196 | case .ro_MD: return "ro_MD" 1197 | case .ro_RO: return "ro_RO" 1198 | case .ro: return "ro" 1199 | case .rm_CH: return "rm_CH" 1200 | case .rm: return "rm" 1201 | case .rof_TZ: return "rof_TZ" 1202 | case .rof: return "rof" 1203 | case .ru_MD: return "ru_MD" 1204 | case .ru_RU: return "ru_RU" 1205 | case .ru_UA: return "ru_UA" 1206 | case .ru: return "ru" 1207 | case .rwk_TZ: return "rwk_TZ" 1208 | case .rwk: return "rwk" 1209 | case .saq_KE: return "saq_KE" 1210 | case .saq: return "saq" 1211 | case .sg_CF: return "sg_CF" 1212 | case .sg: return "sg" 1213 | case .seh_MZ: return "seh_MZ" 1214 | case .seh: return "seh" 1215 | case .sr_Cyrl: return "sr_Cyrl" 1216 | case .sr_Cyrl_BA: return "sr_Cyrl_BA" 1217 | case .sr_Cyrl_ME: return "sr_Cyrl_ME" 1218 | case .sr_Cyrl_RS: return "sr_Cyrl_RS" 1219 | case .sr_Latn: return "sr_Latn" 1220 | case .sr_Latn_BA: return "sr_Latn_BA" 1221 | case .sr_Latn_ME: return "sr_Latn_ME" 1222 | case .sr_Latn_RS: return "sr_Latn_RS" 1223 | case .sr: return "sr" 1224 | case .sn_ZW: return "sn_ZW" 1225 | case .sn: return "sn" 1226 | case .ii_CN: return "ii_CN" 1227 | case .ii: return "ii" 1228 | case .si_LK: return "si_LK" 1229 | case .si: return "si" 1230 | case .sk_SK: return "sk_SK" 1231 | case .sk: return "sk" 1232 | case .sl_SI: return "sl_SI" 1233 | case .sl: return "sl" 1234 | case .xog_UG: return "xog_UG" 1235 | case .xog: return "xog" 1236 | case .so_DJ: return "so_DJ" 1237 | case .so_ET: return "so_ET" 1238 | case .so_KE: return "so_KE" 1239 | case .so_SO: return "so_SO" 1240 | case .so: return "so" 1241 | case .es_AR: return "es_AR" 1242 | case .es_BO: return "es_BO" 1243 | case .es_CL: return "es_CL" 1244 | case .es_CO: return "es_CO" 1245 | case .es_CR: return "es_CR" 1246 | case .es_DO: return "es_DO" 1247 | case .es_EC: return "es_EC" 1248 | case .es_SV: return "es_SV" 1249 | case .es_GQ: return "es_GQ" 1250 | case .es_GT: return "es_GT" 1251 | case .es_HN: return "es_HN" 1252 | case .es_419: return "es_419" 1253 | case .es_MX: return "es_MX" 1254 | case .es_NI: return "es_NI" 1255 | case .es_PA: return "es_PA" 1256 | case .es_PY: return "es_PY" 1257 | case .es_PE: return "es_PE" 1258 | case .es_PR: return "es_PR" 1259 | case .es_ES: return "es_ES" 1260 | case .es_US: return "es_US" 1261 | case .es_UY: return "es_UY" 1262 | case .es_VE: return "es_VE" 1263 | case .es: return "es" 1264 | case .sw_KE: return "sw_KE" 1265 | case .sw_TZ: return "sw_TZ" 1266 | case .sw: return "sw" 1267 | case .sv_FI: return "sv_FI" 1268 | case .sv_SE: return "sv_SE" 1269 | case .sv: return "sv" 1270 | case .gsw_CH: return "gsw_CH" 1271 | case .gsw: return "gsw" 1272 | case .shi_Latn: return "shi_Latn" 1273 | case .shi_Latn_MA: return "shi_Latn_MA" 1274 | case .shi_Tfng: return "shi_Tfng" 1275 | case .shi_Tfng_MA: return "shi_Tfng_MA" 1276 | case .shi: return "shi" 1277 | case .dav_KE: return "dav_KE" 1278 | case .dav: return "dav" 1279 | case .ta_IN: return "ta_IN" 1280 | case .ta_LK: return "ta_LK" 1281 | case .ta: return "ta" 1282 | case .te_IN: return "te_IN" 1283 | case .te: return "te" 1284 | case .teo_KE: return "teo_KE" 1285 | case .teo_UG: return "teo_UG" 1286 | case .teo: return "teo" 1287 | case .th_TH: return "th_TH" 1288 | case .th: return "th" 1289 | case .bo_CN: return "bo_CN" 1290 | case .bo_IN: return "bo_IN" 1291 | case .bo: return "bo" 1292 | case .ti_ER: return "ti_ER" 1293 | case .ti_ET: return "ti_ET" 1294 | case .ti: return "ti" 1295 | case .to_TO: return "to_TO" 1296 | case .to: return "to" 1297 | case .tr_TR: return "tr_TR" 1298 | case .tr: return "tr" 1299 | case .uk_UA: return "uk_UA" 1300 | case .uk: return "uk" 1301 | case .ur_IN: return "ur_IN" 1302 | case .ur_PK: return "ur_PK" 1303 | case .ur: return "ur" 1304 | case .uz_Arab: return "uz_Arab" 1305 | case .uz_Arab_AF: return "uz_Arab_AF" 1306 | case .uz_Cyrl: return "uz_Cyrl" 1307 | case .uz_Cyrl_UZ: return "uz_Cyrl_UZ" 1308 | case .uz_Latn: return "uz_Latn" 1309 | case .uz_Latn_UZ: return "uz_Latn_UZ" 1310 | case .uz: return "uz" 1311 | case .vi_VN: return "vi_VN" 1312 | case .vi: return "vi" 1313 | case .vun_TZ: return "vun_TZ" 1314 | case .vun: return "vun" 1315 | case .cy_GB: return "cy_GB" 1316 | case .cy: return "cy" 1317 | case .yo_NG: return "yo_NG" 1318 | case .yo: return "yo" 1319 | case .zu_ZA: return "zu_ZA" 1320 | case .zu: return "zu" 1321 | } 1322 | } 1323 | 1324 | public var prefix: String { 1325 | return rawValue.components(separatedBy: "_").first ?? rawValue 1326 | } 1327 | 1328 | public var description: String { 1329 | switch self { 1330 | case .af_NA: return "Afrikaans (Namibia)" 1331 | case .af_ZA: return "Afrikaans (South Africa)" 1332 | case .af: return "Afrikaans" 1333 | case .ak_GH: return "Akan (Ghana)" 1334 | case .ak: return "Akan" 1335 | case .sq_AL: return "Albanian (Albania)" 1336 | case .sq: return "Albanian" 1337 | case .am_ET: return "Amharic (Ethiopia)" 1338 | case .am: return "Amharic" 1339 | case .ar_DZ: return "Arabic (Algeria)" 1340 | case .ar_BH: return "Arabic (Bahrain)" 1341 | case .ar_EG: return "Arabic (Egypt)" 1342 | case .ar_IQ: return "Arabic (Iraq)" 1343 | case .ar_JO: return "Arabic (Jordan)" 1344 | case .ar_KW: return "Arabic (Kuwait)" 1345 | case .ar_LB: return "Arabic (Lebanon)" 1346 | case .ar_LY: return "Arabic (Libya)" 1347 | case .ar_MA: return "Arabic (Morocco)" 1348 | case .ar_OM: return "Arabic (Oman)" 1349 | case .ar_QA: return "Arabic (Qatar)" 1350 | case .ar_SA: return "Arabic (Saudi Arabia)" 1351 | case .ar_SD: return "Arabic (Sudan)" 1352 | case .ar_SY: return "Arabic (Syria)" 1353 | case .ar_TN: return "Arabic (Tunisia)" 1354 | case .ar_AE: return "Arabic (United Arab Emirates)" 1355 | case .ar_YE: return "Arabic (Yemen)" 1356 | case .ar: return "Arabic" 1357 | case .hy_AM: return "Armenian (Armenia)" 1358 | case .hy: return "Armenian" 1359 | case .as_IN: return "Assamese (India)" 1360 | case .as: return "Assamese" 1361 | case .asa_TZ: return "Asu (Tanzania)" 1362 | case .asa: return "Asu" 1363 | case .az_Cyrl: return "Azerbaijani (Cyrillic)" 1364 | case .az_Cyrl_AZ: return "Azerbaijani (Cyrillic, Azerbaijan)" 1365 | case .az_Latn: return "Azerbaijani (Latin)" 1366 | case .az_Latn_AZ: return "Azerbaijani (Latin, Azerbaijan)" 1367 | case .az: return "Azerbaijani" 1368 | case .bm_ML: return "Bambara (Mali)" 1369 | case .bm: return "Bambara" 1370 | case .eu_ES: return "Basque (Spain)" 1371 | case .eu: return "Basque" 1372 | case .be_BY: return "Belarusian (Belarus)" 1373 | case .be: return "Belarusian" 1374 | case .bem_ZM: return "Bemba (Zambia)" 1375 | case .bem: return "Bemba" 1376 | case .bez_TZ: return "Bena (Tanzania)" 1377 | case .bez: return "Bena" 1378 | case .bn_BD: return "Bengali (Bangladesh)" 1379 | case .bn_IN: return "Bengali (India)" 1380 | case .bn: return "Bengali" 1381 | case .bs_BA: return "Bosnian (Bosnia and Herzegovina)" 1382 | case .bs: return "Bosnian" 1383 | case .bg_BG: return "Bulgarian (Bulgaria)" 1384 | case .bg: return "Bulgarian" 1385 | case .my_MM: return "Burmese (Myanmar [Burma])" 1386 | case .my: return "Burmese" 1387 | case .yue_Hant_HK: return "Cantonese (Traditional, Hong Kong SAR China)" 1388 | case .ca_ES: return "Catalan (Spain)" 1389 | case .ca: return "Catalan" 1390 | case .tzm_Latn: return "Central Morocco Tamazight (Latin)" 1391 | case .tzm_Latn_MA: return "Central Morocco Tamazight (Latin, Morocco)" 1392 | case .tzm: return "Central Morocco Tamazight" 1393 | case .chr_US: return "Cherokee (United States)" 1394 | case .chr: return "Cherokee" 1395 | case .cgg_UG: return "Chiga (Uganda)" 1396 | case .cgg: return "Chiga" 1397 | case .zh_Hans: return "Chinese (Simplified Han)" 1398 | case .zh_Hans_CN: return "Chinese (Simplified Han, China)" 1399 | case .zh_Hans_HK: return "Chinese (Simplified Han, Hong Kong SAR China)" 1400 | case .zh_Hans_MO: return "Chinese (Simplified Han, Macau SAR China)" 1401 | case .zh_Hans_SG: return "Chinese (Simplified Han, Singapore)" 1402 | case .zh_Hant: return "Chinese (Traditional Han)" 1403 | case .zh_Hant_HK: return "Chinese (Traditional Han, Hong Kong SAR China)" 1404 | case .zh_Hant_MO: return "Chinese (Traditional Han, Macau SAR China)" 1405 | case .zh_Hant_TW: return "Chinese (Traditional Han, Taiwan)" 1406 | case .zh: return "Chinese" 1407 | case .kw_GB: return "Cornish (United Kingdom)" 1408 | case .kw: return "Cornish" 1409 | case .hr_HR: return "Croatian (Croatia)" 1410 | case .hr: return "Croatian" 1411 | case .cs_CZ: return "Czech (Czech Republic)" 1412 | case .cs: return "Czech" 1413 | case .da_DK: return "Danish (Denmark)" 1414 | case .da: return "Danish" 1415 | case .nl_BE: return "Dutch (Belgium)" 1416 | case .nl_NL: return "Dutch (Netherlands)" 1417 | case .nl: return "Dutch" 1418 | case .ebu_KE: return "Embu (Kenya)" 1419 | case .ebu: return "Embu" 1420 | case .en_AS: return "English (American Samoa)" 1421 | case .en_AU: return "English (Australia)" 1422 | case .en_BE: return "English (Belgium)" 1423 | case .en_BZ: return "English (Belize)" 1424 | case .en_BW: return "English (Botswana)" 1425 | case .en_CA: return "English (Canada)" 1426 | case .en_GU: return "English (Guam)" 1427 | case .en_HK: return "English (Hong Kong SAR China)" 1428 | case .en_IN: return "English (India)" 1429 | case .en_IE: return "English (Ireland)" 1430 | case .en_IL: return "English (Israel)" 1431 | case .en_JM: return "English (Jamaica)" 1432 | case .en_MT: return "English (Malta)" 1433 | case .en_MH: return "English (Marshall Islands)" 1434 | case .en_MU: return "English (Mauritius)" 1435 | case .en_NA: return "English (Namibia)" 1436 | case .en_NZ: return "English (New Zealand)" 1437 | case .en_MP: return "English (Northern Mariana Islands)" 1438 | case .en_PK: return "English (Pakistan)" 1439 | case .en_PH: return "English (Philippines)" 1440 | case .en_SG: return "English (Singapore)" 1441 | case .en_ZA: return "English (South Africa)" 1442 | case .en_TT: return "English (Trinidad and Tobago)" 1443 | case .en_UM: return "English (U.S. Minor Outlying Islands)" 1444 | case .en_VI: return "English (U.S. Virgin Islands)" 1445 | case .en_GB: return "English (United Kingdom)" 1446 | case .en_US: return "English (United States)" 1447 | case .en_ZW: return "English (Zimbabwe)" 1448 | case .en: return "English" 1449 | case .eo: return "Esperanto" 1450 | case .et_EE: return "Estonian (Estonia)" 1451 | case .et: return "Estonian" 1452 | case .ee_GH: return "Ewe (Ghana)" 1453 | case .ee_TG: return "Ewe (Togo)" 1454 | case .ee: return "Ewe" 1455 | case .fo_FO: return "Faroese (Faroe Islands)" 1456 | case .fo: return "Faroese" 1457 | case .fil_PH: return "Filipino (Philippines)" 1458 | case .fil: return "Filipino" 1459 | case .fi_FI: return "Finnish (Finland)" 1460 | case .fi: return "Finnish" 1461 | case .fr_BE: return "French (Belgium)" 1462 | case .fr_BJ: return "French (Benin)" 1463 | case .fr_BF: return "French (Burkina Faso)" 1464 | case .fr_BI: return "French (Burundi)" 1465 | case .fr_CM: return "French (Cameroon)" 1466 | case .fr_CA: return "French (Canada)" 1467 | case .fr_CF: return "French (Central African Republic)" 1468 | case .fr_TD: return "French (Chad)" 1469 | case .fr_KM: return "French (Comoros)" 1470 | case .fr_CG: return "French (Congo - Brazzaville)" 1471 | case .fr_CD: return "French (Congo - Kinshasa)" 1472 | case .fr_CI: return "French (Côte d’Ivoire)" 1473 | case .fr_DJ: return "French (Djibouti)" 1474 | case .fr_GQ: return "French (Equatorial Guinea)" 1475 | case .fr_FR: return "French (France)" 1476 | case .fr_GA: return "French (Gabon)" 1477 | case .fr_GP: return "French (Guadeloupe)" 1478 | case .fr_GN: return "French (Guinea)" 1479 | case .fr_LU: return "French (Luxembourg)" 1480 | case .fr_MG: return "French (Madagascar)" 1481 | case .fr_ML: return "French (Mali)" 1482 | case .fr_MQ: return "French (Martinique)" 1483 | case .fr_MC: return "French (Monaco)" 1484 | case .fr_NE: return "French (Niger)" 1485 | case .fr_RW: return "French (Rwanda)" 1486 | case .fr_RE: return "French (Réunion)" 1487 | case .fr_BL: return "French (Saint Barthélemy)" 1488 | case .fr_MF: return "French (Saint Martin)" 1489 | case .fr_SN: return "French (Senegal)" 1490 | case .fr_CH: return "French (Switzerland)" 1491 | case .fr_TG: return "French (Togo)" 1492 | case .fr: return "French" 1493 | case .ff_SN: return "Fulah (Senegal)" 1494 | case .ff: return "Fulah" 1495 | case .gl_ES: return "Galician (Spain)" 1496 | case .gl: return "Galician" 1497 | case .lg_UG: return "Ganda (Uganda)" 1498 | case .lg: return "Ganda" 1499 | case .ka_GE: return "Georgian (Georgia)" 1500 | case .ka: return "Georgian" 1501 | case .de_AT: return "German (Austria)" 1502 | case .de_BE: return "German (Belgium)" 1503 | case .de_DE: return "German (Germany)" 1504 | case .de_LI: return "German (Liechtenstein)" 1505 | case .de_LU: return "German (Luxembourg)" 1506 | case .de_CH: return "German (Switzerland)" 1507 | case .de: return "German" 1508 | case .el_CY: return "Greek (Cyprus)" 1509 | case .el_GR: return "Greek (Greece)" 1510 | case .el: return "Greek" 1511 | case .gu_IN: return "Gujarati (India)" 1512 | case .gu: return "Gujarati" 1513 | case .guz_KE: return "Gusii (Kenya)" 1514 | case .guz: return "Gusii" 1515 | case .ha_Latn: return "Hausa (Latin)" 1516 | case .ha_Latn_GH: return "Hausa (Latin, Ghana)" 1517 | case .ha_Latn_NE: return "Hausa (Latin, Niger)" 1518 | case .ha_Latn_NG: return "Hausa (Latin, Nigeria)" 1519 | case .ha: return "Hausa" 1520 | case .haw_US: return "Hawaiian (United States)" 1521 | case .haw: return "Hawaiian" 1522 | case .he_IL: return "Hebrew (Israel)" 1523 | case .he: return "Hebrew" 1524 | case .hi_IN: return "Hindi (India)" 1525 | case .hi: return "Hindi" 1526 | case .hu_HU: return "Hungarian (Hungary)" 1527 | case .hu: return "Hungarian" 1528 | case .is_IS: return "Icelandic (Iceland)" 1529 | case .is: return "Icelandic" 1530 | case .ig_NG: return "Igbo (Nigeria)" 1531 | case .ig: return "Igbo" 1532 | case .id_ID: return "Indonesian (Indonesia)" 1533 | case .id: return "Indonesian" 1534 | case .ga_IE: return "Irish (Ireland)" 1535 | case .ga: return "Irish" 1536 | case .it_IT: return "Italian (Italy)" 1537 | case .it_CH: return "Italian (Switzerland)" 1538 | case .it: return "Italian" 1539 | case .ja_JP: return "Japanese (Japan)" 1540 | case .ja: return "Japanese" 1541 | case .kea_CV: return "Kabuverdianu (Cape Verde)" 1542 | case .kea: return "Kabuverdianu" 1543 | case .kab_DZ: return "Kabyle (Algeria)" 1544 | case .kab: return "Kabyle" 1545 | case .kl_GL: return "Kalaallisut (Greenland)" 1546 | case .kl: return "Kalaallisut" 1547 | case .kln_KE: return "Kalenjin (Kenya)" 1548 | case .kln: return "Kalenjin" 1549 | case .kam_KE: return "Kamba (Kenya)" 1550 | case .kam: return "Kamba" 1551 | case .kn_IN: return "Kannada (India)" 1552 | case .kn: return "Kannada" 1553 | case .kk_Cyrl: return "Kazakh (Cyrillic)" 1554 | case .kk_Cyrl_KZ: return "Kazakh (Cyrillic, Kazakhstan)" 1555 | case .kk: return "Kazakh" 1556 | case .km_KH: return "Khmer (Cambodia)" 1557 | case .km: return "Khmer" 1558 | case .ki_KE: return "Kikuyu (Kenya)" 1559 | case .ki: return "Kikuyu" 1560 | case .rw_RW: return "Kinyarwanda (Rwanda)" 1561 | case .rw: return "Kinyarwanda" 1562 | case .kok_IN: return "Konkani (India)" 1563 | case .kok: return "Konkani" 1564 | case .ko_KR: return "Korean (South Korea)" 1565 | case .ko: return "Korean" 1566 | case .khq_ML: return "Koyra Chiini (Mali)" 1567 | case .khq: return "Koyra Chiini" 1568 | case .ses_ML: return "Koyraboro Senni (Mali)" 1569 | case .ses: return "Koyraboro Senni" 1570 | case .lag_TZ: return "Langi (Tanzania)" 1571 | case .lag: return "Langi" 1572 | case .lv_LV: return "Latvian (Latvia)" 1573 | case .lv: return "Latvian" 1574 | case .lt_LT: return "Lithuanian (Lithuania)" 1575 | case .lt: return "Lithuanian" 1576 | case .luo_KE: return "Luo (Kenya)" 1577 | case .luo: return "Luo" 1578 | case .luy_KE: return "Luyia (Kenya)" 1579 | case .luy: return "Luyia" 1580 | case .mk_MK: return "Macedonian (Macedonia)" 1581 | case .mk: return "Macedonian" 1582 | case .jmc_TZ: return "Machame (Tanzania)" 1583 | case .jmc: return "Machame" 1584 | case .kde_TZ: return "Makonde (Tanzania)" 1585 | case .kde: return "Makonde" 1586 | case .mg_MG: return "Malagasy (Madagascar)" 1587 | case .mg: return "Malagasy" 1588 | case .ms_BN: return "Malay (Brunei)" 1589 | case .ms_MY: return "Malay (Malaysia)" 1590 | case .ms: return "Malay" 1591 | case .ml_IN: return "Malayalam (India)" 1592 | case .ml: return "Malayalam" 1593 | case .mt_MT: return "Maltese (Malta)" 1594 | case .mt: return "Maltese" 1595 | case .gv_GB: return "Manx (United Kingdom)" 1596 | case .gv: return "Manx" 1597 | case .mr_IN: return "Marathi (India)" 1598 | case .mr: return "Marathi" 1599 | case .mas_KE: return "Masai (Kenya)" 1600 | case .mas_TZ: return "Masai (Tanzania)" 1601 | case .mas: return "Masai" 1602 | case .mer_KE: return "Meru (Kenya)" 1603 | case .mer: return "Meru" 1604 | case .mfe_MU: return "Morisyen (Mauritius)" 1605 | case .mfe: return "Morisyen" 1606 | case .naq_NA: return "Nama (Namibia)" 1607 | case .naq: return "Nama" 1608 | case .ne_IN: return "Nepali (India)" 1609 | case .ne_NP: return "Nepali (Nepal)" 1610 | case .ne: return "Nepali" 1611 | case .nd_ZW: return "North Ndebele (Zimbabwe)" 1612 | case .nd: return "North Ndebele" 1613 | case .nb_NO: return "Norwegian Bokmål (Norway)" 1614 | case .nb: return "Norwegian Bokmål" 1615 | case .nn_NO: return "Norwegian Nynorsk (Norway)" 1616 | case .nn: return "Norwegian Nynorsk" 1617 | case .nyn_UG: return "Nyankole (Uganda)" 1618 | case .nyn: return "Nyankole" 1619 | case .or_IN: return "Oriya (India)" 1620 | case .or: return "Oriya" 1621 | case .om_ET: return "Oromo (Ethiopia)" 1622 | case .om_KE: return "Oromo (Kenya)" 1623 | case .om: return "Oromo" 1624 | case .ps_AF: return "Pashto (Afghanistan)" 1625 | case .ps: return "Pashto" 1626 | case .fa_AF: return "Persian (Afghanistan)" 1627 | case .fa_IR: return "Persian (Iran)" 1628 | case .fa: return "Persian" 1629 | case .pl_PL: return "Polish (Poland)" 1630 | case .pl: return "Polish" 1631 | case .pt_BR: return "Portuguese (Brazil)" 1632 | case .pt_GW: return "Portuguese (Guinea-Bissau)" 1633 | case .pt_MZ: return "Portuguese (Mozambique)" 1634 | case .pt_PT: return "Portuguese (Portugal)" 1635 | case .pt: return "Portuguese" 1636 | case .pa_Arab: return "Punjabi (Arabic)" 1637 | case .pa_Arab_PK: return "Punjabi (Arabic, Pakistan)" 1638 | case .pa_Guru: return "Punjabi (Gurmukhi)" 1639 | case .pa_Guru_IN: return "Punjabi (Gurmukhi, India)" 1640 | case .pa: return "Punjabi" 1641 | case .ro_MD: return "Romanian (Moldova)" 1642 | case .ro_RO: return "Romanian (Romania)" 1643 | case .ro: return "Romanian" 1644 | case .rm_CH: return "Romansh (Switzerland)" 1645 | case .rm: return "Romansh" 1646 | case .rof_TZ: return "Rombo (Tanzania)" 1647 | case .rof: return "Rombo" 1648 | case .ru_MD: return "Russian (Moldova)" 1649 | case .ru_RU: return "Russian (Russia)" 1650 | case .ru_UA: return "Russian (Ukraine)" 1651 | case .ru: return "Russian" 1652 | case .rwk_TZ: return "Rwa (Tanzania)" 1653 | case .rwk: return "Rwa" 1654 | case .saq_KE: return "Samburu (Kenya)" 1655 | case .saq: return "Samburu" 1656 | case .sg_CF: return "Sango (Central African Republic)" 1657 | case .sg: return "Sango" 1658 | case .seh_MZ: return "Sena (Mozambique)" 1659 | case .seh: return "Sena" 1660 | case .sr_Cyrl: return "Serbian (Cyrillic)" 1661 | case .sr_Cyrl_BA: return "Serbian (Cyrillic, Bosnia and Herzegovina)" 1662 | case .sr_Cyrl_ME: return "Serbian (Cyrillic, Montenegro)" 1663 | case .sr_Cyrl_RS: return "Serbian (Cyrillic, Serbia)" 1664 | case .sr_Latn: return "Serbian (Latin)" 1665 | case .sr_Latn_BA: return "Serbian (Latin, Bosnia and Herzegovina)" 1666 | case .sr_Latn_ME: return "Serbian (Latin, Montenegro)" 1667 | case .sr_Latn_RS: return "Serbian (Latin, Serbia)" 1668 | case .sr: return "Serbian" 1669 | case .sn_ZW: return "Shona (Zimbabwe)" 1670 | case .sn: return "Shona" 1671 | case .ii_CN: return "Sichuan Yi (China)" 1672 | case .ii: return "Sichuan Yi" 1673 | case .si_LK: return "Sinhala (Sri Lanka)" 1674 | case .si: return "Sinhala" 1675 | case .sk_SK: return "Slovak (Slovakia)" 1676 | case .sk: return "Slovak" 1677 | case .sl_SI: return "Slovenian (Slovenia)" 1678 | case .sl: return "Slovenian" 1679 | case .xog_UG: return "Soga (Uganda)" 1680 | case .xog: return "Soga" 1681 | case .so_DJ: return "Somali (Djibouti)" 1682 | case .so_ET: return "Somali (Ethiopia)" 1683 | case .so_KE: return "Somali (Kenya)" 1684 | case .so_SO: return "Somali (Somalia)" 1685 | case .so: return "Somali" 1686 | case .es_AR: return "Spanish (Argentina)" 1687 | case .es_BO: return "Spanish (Bolivia)" 1688 | case .es_CL: return "Spanish (Chile)" 1689 | case .es_CO: return "Spanish (Colombia)" 1690 | case .es_CR: return "Spanish (Costa Rica)" 1691 | case .es_DO: return "Spanish (Dominican Republic)" 1692 | case .es_EC: return "Spanish (Ecuador)" 1693 | case .es_SV: return "Spanish (El Salvador)" 1694 | case .es_GQ: return "Spanish (Equatorial Guinea)" 1695 | case .es_GT: return "Spanish (Guatemala)" 1696 | case .es_HN: return "Spanish (Honduras)" 1697 | case .es_419: return "Spanish (Latin America)" 1698 | case .es_MX: return "Spanish (Mexico)" 1699 | case .es_NI: return "Spanish (Nicaragua)" 1700 | case .es_PA: return "Spanish (Panama)" 1701 | case .es_PY: return "Spanish (Paraguay)" 1702 | case .es_PE: return "Spanish (Peru)" 1703 | case .es_PR: return "Spanish (Puerto Rico)" 1704 | case .es_ES: return "Spanish (Spain)" 1705 | case .es_US: return "Spanish (United States)" 1706 | case .es_UY: return "Spanish (Uruguay)" 1707 | case .es_VE: return "Spanish (Venezuela)" 1708 | case .es: return "Spanish" 1709 | case .sw_KE: return "Swahili (Kenya)" 1710 | case .sw_TZ: return "Swahili (Tanzania)" 1711 | case .sw: return "Swahili" 1712 | case .sv_FI: return "Swedish (Finland)" 1713 | case .sv_SE: return "Swedish (Sweden)" 1714 | case .sv: return "Swedish" 1715 | case .gsw_CH: return "Swiss German (Switzerland)" 1716 | case .gsw: return "Swiss German" 1717 | case .shi_Latn: return "Tachelhit (Latin)" 1718 | case .shi_Latn_MA: return "Tachelhit (Latin, Morocco)" 1719 | case .shi_Tfng: return "Tachelhit (Tifinagh)" 1720 | case .shi_Tfng_MA: return "Tachelhit (Tifinagh, Morocco)" 1721 | case .shi: return "Tachelhit" 1722 | case .dav_KE: return "Taita (Kenya)" 1723 | case .dav: return "Taita" 1724 | case .ta_IN: return "Tamil (India)" 1725 | case .ta_LK: return "Tamil (Sri Lanka)" 1726 | case .ta: return "Tamil" 1727 | case .te_IN: return "Telugu (India)" 1728 | case .te: return "Telugu" 1729 | case .teo_KE: return "Teso (Kenya)" 1730 | case .teo_UG: return "Teso (Uganda)" 1731 | case .teo: return "Teso" 1732 | case .th_TH: return "Thai (Thailand)" 1733 | case .th: return "Thai" 1734 | case .bo_CN: return "Tibetan (China)" 1735 | case .bo_IN: return "Tibetan (India)" 1736 | case .bo: return "Tibetan" 1737 | case .ti_ER: return "Tigrinya (Eritrea)" 1738 | case .ti_ET: return "Tigrinya (Ethiopia)" 1739 | case .ti: return "Tigrinya" 1740 | case .to_TO: return "Tonga (Tonga)" 1741 | case .to: return "Tonga" 1742 | case .tr_TR: return "Turkish (Turkey)" 1743 | case .tr: return "Turkish" 1744 | case .uk_UA: return "Ukrainian (Ukraine)" 1745 | case .uk: return "Ukrainian" 1746 | case .ur_IN: return "Urdu (India)" 1747 | case .ur_PK: return "Urdu (Pakistan)" 1748 | case .ur: return "Urdu" 1749 | case .uz_Arab: return "Uzbek (Arabic)" 1750 | case .uz_Arab_AF: return "Uzbek (Arabic, Afghanistan)" 1751 | case .uz_Cyrl: return "Uzbek (Cyrillic)" 1752 | case .uz_Cyrl_UZ: return "Uzbek (Cyrillic, Uzbekistan)" 1753 | case .uz_Latn: return "Uzbek (Latin)" 1754 | case .uz_Latn_UZ: return "Uzbek (Latin, Uzbekistan)" 1755 | case .uz: return "Uzbek" 1756 | case .vi_VN: return "Vietnamese (Vietnam)" 1757 | case .vi: return "Vietnamese" 1758 | case .vun_TZ: return "Vunjo (Tanzania)" 1759 | case .vun: return "Vunjo" 1760 | case .cy_GB: return "Welsh (United Kingdom)" 1761 | case .cy: return "Welsh" 1762 | case .yo_NG: return "Yoruba (Nigeria)" 1763 | case .yo: return "Yoruba" 1764 | case .zu_ZA: return "Zulu (South Africa)" 1765 | case .zu: return "Zulu" 1766 | } 1767 | } 1768 | } 1769 | -------------------------------------------------------------------------------- /Classes/Localizable.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public protocol Localizable { 4 | /// Locale Key 5 | typealias LocaleKey = KeyPath 6 | 7 | /// Locale for the object 8 | /// If it is nil `default` locale will be taken from `Localizer` shared instance 9 | static var localeKey: LocaleKey? { get } 10 | } 11 | 12 | extension Localizable { 13 | /// Access the Localizable locale keyed by `localeKey`. 14 | var locale: String? { 15 | get { 16 | guard let localeKey = Self.localeKey else { 17 | return nil 18 | } 19 | return self[keyPath: localeKey] 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Classes/LocalizedString.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public enum LocalizedString { 4 | /// Afrikaans (Namibia) 5 | case af_NA(String) 6 | /// Afrikaans (South Africa) 7 | case af_ZA(String) 8 | /// Afrikaans 9 | case af(String) 10 | /// Akan (Ghana) 11 | case ak_GH(String) 12 | /// Akan 13 | case ak(String) 14 | /// Albanian (Albania) 15 | case sq_AL(String) 16 | /// Albanian 17 | case sq(String) 18 | /// Amharic (Ethiopia) 19 | case am_ET(String) 20 | /// Amharic 21 | case am(String) 22 | /// Arabic (Algeria) 23 | case ar_DZ(String) 24 | /// Arabic (Bahrain) 25 | case ar_BH(String) 26 | /// Arabic (Egypt) 27 | case ar_EG(String) 28 | /// Arabic (Iraq) 29 | case ar_IQ(String) 30 | /// Arabic (Jordan) 31 | case ar_JO(String) 32 | /// Arabic (Kuwait) 33 | case ar_KW(String) 34 | /// Arabic (Lebanon) 35 | case ar_LB(String) 36 | /// Arabic (Libya) 37 | case ar_LY(String) 38 | /// Arabic (Morocco) 39 | case ar_MA(String) 40 | /// Arabic (Oman) 41 | case ar_OM(String) 42 | /// Arabic (Qatar) 43 | case ar_QA(String) 44 | /// Arabic (Saudi Arabia) 45 | case ar_SA(String) 46 | /// Arabic (Sudan) 47 | case ar_SD(String) 48 | /// Arabic (Syria) 49 | case ar_SY(String) 50 | /// Arabic (Tunisia) 51 | case ar_TN(String) 52 | /// Arabic (United Arab Emirates) 53 | case ar_AE(String) 54 | /// Arabic (Yemen) 55 | case ar_YE(String) 56 | /// Arabic 57 | case ar(String) 58 | /// Armenian (Armenia) 59 | case hy_AM(String) 60 | /// Armenian 61 | case hy(String) 62 | /// Assamese (India) 63 | case as_IN(String) 64 | /// Assamese 65 | case `as`(String) 66 | /// Asu (Tanzania) 67 | case asa_TZ(String) 68 | /// Asu 69 | case asa(String) 70 | /// Azerbaijani (Cyrillic) 71 | case az_Cyrl(String) 72 | /// Azerbaijani (Cyrillic, Azerbaijan) 73 | case az_Cyrl_AZ(String) 74 | /// Azerbaijani (Latin) 75 | case az_Latn(String) 76 | /// Azerbaijani (Latin, Azerbaijan) 77 | case az_Latn_AZ(String) 78 | /// Azerbaijani 79 | case az(String) 80 | /// Bambara (Mali) 81 | case bm_ML(String) 82 | /// Bambara 83 | case bm(String) 84 | /// Basque (Spain) 85 | case eu_ES(String) 86 | /// Basque 87 | case eu(String) 88 | /// Belarusian (Belarus) 89 | case be_BY(String) 90 | /// Belarusian 91 | case be(String) 92 | /// Bemba (Zambia) 93 | case bem_ZM(String) 94 | /// Bemba 95 | case bem(String) 96 | /// Bena (Tanzania) 97 | case bez_TZ(String) 98 | /// Bena 99 | case bez(String) 100 | /// Bengali (Bangladesh) 101 | case bn_BD(String) 102 | /// Bengali (India) 103 | case bn_IN(String) 104 | /// Bengali 105 | case bn(String) 106 | /// Bosnian (Bosnia and Herzegovina) 107 | case bs_BA(String) 108 | /// Bosnian 109 | case bs(String) 110 | /// Bulgarian (Bulgaria) 111 | case bg_BG(String) 112 | /// Bulgarian 113 | case bg(String) 114 | /// Burmese (Myanmar [Burma]) 115 | case my_MM(String) 116 | /// Burmese 117 | case my(String) 118 | /// Cantonese (Traditional, Hong Kong SAR China) 119 | case yue_Hant_HK(String) 120 | /// Catalan (Spain) 121 | case ca_ES(String) 122 | /// Catalan 123 | case ca(String) 124 | /// Central Morocco Tamazight (Latin) 125 | case tzm_Latn(String) 126 | /// Central Morocco Tamazight (Latin, Morocco) 127 | case tzm_Latn_MA(String) 128 | /// Central Morocco Tamazight 129 | case tzm(String) 130 | /// Cherokee (United States) 131 | case chr_US(String) 132 | /// Cherokee 133 | case chr(String) 134 | /// Chiga (Uganda) 135 | case cgg_UG(String) 136 | /// Chiga 137 | case cgg(String) 138 | /// Chinese (Simplified Han) 139 | case zh_Hans(String) 140 | /// Chinese (Simplified Han, China) 141 | case zh_Hans_CN(String) 142 | /// Chinese (Simplified Han, Hong Kong SAR China) 143 | case zh_Hans_HK(String) 144 | /// Chinese (Simplified Han, Macau SAR China) 145 | case zh_Hans_MO(String) 146 | /// Chinese (Simplified Han, Singapore) 147 | case zh_Hans_SG(String) 148 | /// Chinese (Traditional Han) 149 | case zh_Hant(String) 150 | /// Chinese (Traditional Han, Hong Kong SAR China) 151 | case zh_Hant_HK(String) 152 | /// Chinese (Traditional Han, Macau SAR China) 153 | case zh_Hant_MO(String) 154 | /// Chinese (Traditional Han, Taiwan) 155 | case zh_Hant_TW(String) 156 | /// Chinese 157 | case zh(String) 158 | /// Cornish (United Kingdom) 159 | case kw_GB(String) 160 | /// Cornish 161 | case kw(String) 162 | /// Croatian (Croatia) 163 | case hr_HR(String) 164 | /// Croatian 165 | case hr(String) 166 | /// Czech (Czech Republic) 167 | case cs_CZ(String) 168 | /// Czech 169 | case cs(String) 170 | /// Danish (Denmark) 171 | case da_DK(String) 172 | /// Danish 173 | case da(String) 174 | /// Dutch (Belgium) 175 | case nl_BE(String) 176 | /// Dutch (Netherlands) 177 | case nl_NL(String) 178 | /// Dutch 179 | case nl(String) 180 | /// Embu (Kenya) 181 | case ebu_KE(String) 182 | /// Embu 183 | case ebu(String) 184 | /// English (American Samoa) 185 | case en_AS(String) 186 | /// English (Australia) 187 | case en_AU(String) 188 | /// English (Belgium) 189 | case en_BE(String) 190 | /// English (Belize) 191 | case en_BZ(String) 192 | /// English (Botswana) 193 | case en_BW(String) 194 | /// English (Canada) 195 | case en_CA(String) 196 | /// English (Guam) 197 | case en_GU(String) 198 | /// English (Hong Kong SAR China) 199 | case en_HK(String) 200 | /// English (India) 201 | case en_IN(String) 202 | /// English (Ireland) 203 | case en_IE(String) 204 | /// English (Israel) 205 | case en_IL(String) 206 | /// English (Jamaica) 207 | case en_JM(String) 208 | /// English (Malta) 209 | case en_MT(String) 210 | /// English (Marshall Islands) 211 | case en_MH(String) 212 | /// English (Mauritius) 213 | case en_MU(String) 214 | /// English (Namibia) 215 | case en_NA(String) 216 | /// English (New Zealand) 217 | case en_NZ(String) 218 | /// English (Northern Mariana Islands) 219 | case en_MP(String) 220 | /// English (Pakistan) 221 | case en_PK(String) 222 | /// English (Philippines) 223 | case en_PH(String) 224 | /// English (Singapore) 225 | case en_SG(String) 226 | /// English (South Africa) 227 | case en_ZA(String) 228 | /// English (Trinidad and Tobago) 229 | case en_TT(String) 230 | /// English (U.S. Minor Outlying Islands) 231 | case en_UM(String) 232 | /// English (U.S. Virgin Islands) 233 | case en_VI(String) 234 | /// English (United Kingdom) 235 | case en_GB(String) 236 | /// English (United States) 237 | case en_US(String) 238 | /// English (Zimbabwe) 239 | case en_ZW(String) 240 | /// English 241 | case en(String) 242 | /// Esperanto 243 | case eo(String) 244 | /// Estonian (Estonia) 245 | case et_EE(String) 246 | /// Estonian 247 | case et(String) 248 | /// Ewe (Ghana) 249 | case ee_GH(String) 250 | /// Ewe (Togo) 251 | case ee_TG(String) 252 | /// Ewe 253 | case ee(String) 254 | /// Faroese (Faroe Islands) 255 | case fo_FO(String) 256 | /// Faroese 257 | case fo(String) 258 | /// Filipino (Philippines) 259 | case fil_PH(String) 260 | /// Filipino 261 | case fil(String) 262 | /// Finnish (Finland) 263 | case fi_FI(String) 264 | /// Finnish 265 | case fi(String) 266 | /// French (Belgium) 267 | case fr_BE(String) 268 | /// French (Benin) 269 | case fr_BJ(String) 270 | /// French (Burkina Faso) 271 | case fr_BF(String) 272 | /// French (Burundi) 273 | case fr_BI(String) 274 | /// French (Cameroon) 275 | case fr_CM(String) 276 | /// French (Canada) 277 | case fr_CA(String) 278 | /// French (Central African Republic) 279 | case fr_CF(String) 280 | /// French (Chad) 281 | case fr_TD(String) 282 | /// French (Comoros) 283 | case fr_KM(String) 284 | /// French (Congo - Brazzaville) 285 | case fr_CG(String) 286 | /// French (Congo - Kinshasa) 287 | case fr_CD(String) 288 | /// French (Côte d’Ivoire) 289 | case fr_CI(String) 290 | /// French (Djibouti) 291 | case fr_DJ(String) 292 | /// French (Equatorial Guinea) 293 | case fr_GQ(String) 294 | /// French (France) 295 | case fr_FR(String) 296 | /// French (Gabon) 297 | case fr_GA(String) 298 | /// French (Guadeloupe) 299 | case fr_GP(String) 300 | /// French (Guinea) 301 | case fr_GN(String) 302 | /// French (Luxembourg) 303 | case fr_LU(String) 304 | /// French (Madagascar) 305 | case fr_MG(String) 306 | /// French (Mali) 307 | case fr_ML(String) 308 | /// French (Martinique) 309 | case fr_MQ(String) 310 | /// French (Monaco) 311 | case fr_MC(String) 312 | /// French (Niger) 313 | case fr_NE(String) 314 | /// French (Rwanda) 315 | case fr_RW(String) 316 | /// French (Réunion) 317 | case fr_RE(String) 318 | /// French (Saint Barthélemy) 319 | case fr_BL(String) 320 | /// French (Saint Martin) 321 | case fr_MF(String) 322 | /// French (Senegal) 323 | case fr_SN(String) 324 | /// French (Switzerland) 325 | case fr_CH(String) 326 | /// French (Togo) 327 | case fr_TG(String) 328 | /// French 329 | case fr(String) 330 | /// Fulah (Senegal) 331 | case ff_SN(String) 332 | /// Fulah 333 | case ff(String) 334 | /// Galician (Spain) 335 | case gl_ES(String) 336 | /// Galician 337 | case gl(String) 338 | /// Ganda (Uganda) 339 | case lg_UG(String) 340 | /// Ganda 341 | case lg(String) 342 | /// Georgian (Georgia) 343 | case ka_GE(String) 344 | /// Georgian 345 | case ka(String) 346 | /// German (Austria) 347 | case de_AT(String) 348 | /// German (Belgium) 349 | case de_BE(String) 350 | /// German (Germany) 351 | case de_DE(String) 352 | /// German (Liechtenstein) 353 | case de_LI(String) 354 | /// German (Luxembourg) 355 | case de_LU(String) 356 | /// German (Switzerland) 357 | case de_CH(String) 358 | /// German 359 | case de(String) 360 | /// Greek (Cyprus) 361 | case el_CY(String) 362 | /// Greek (Greece) 363 | case el_GR(String) 364 | /// Greek 365 | case el(String) 366 | /// Gujarati (India) 367 | case gu_IN(String) 368 | /// Gujarati 369 | case gu(String) 370 | /// Gusii (Kenya) 371 | case guz_KE(String) 372 | /// Gusii 373 | case guz(String) 374 | /// Hausa (Latin) 375 | case ha_Latn(String) 376 | /// Hausa (Latin, Ghana) 377 | case ha_Latn_GH(String) 378 | /// Hausa (Latin, Niger) 379 | case ha_Latn_NE(String) 380 | /// Hausa (Latin, Nigeria) 381 | case ha_Latn_NG(String) 382 | /// Hausa 383 | case ha(String) 384 | /// Hawaiian (United States) 385 | case haw_US(String) 386 | /// Hawaiian 387 | case haw(String) 388 | /// Hebrew (Israel) 389 | case he_IL(String) 390 | /// Hebrew 391 | case he(String) 392 | /// Hindi (India) 393 | case hi_IN(String) 394 | /// Hindi 395 | case hi(String) 396 | /// Hungarian (Hungary) 397 | case hu_HU(String) 398 | /// Hungarian 399 | case hu(String) 400 | /// Icelandic (Iceland) 401 | case is_IS(String) 402 | /// Icelandic 403 | case `is`(String) 404 | /// Igbo (Nigeria) 405 | case ig_NG(String) 406 | /// Igbo 407 | case ig(String) 408 | /// Indonesian (Indonesia) 409 | case id_ID(String) 410 | /// Indonesian 411 | case id(String) 412 | /// Irish (Ireland) 413 | case ga_IE(String) 414 | /// Irish 415 | case ga(String) 416 | /// Italian (Italy) 417 | case it_IT(String) 418 | /// Italian (Switzerland) 419 | case it_CH(String) 420 | /// Italian 421 | case it(String) 422 | /// Japanese (Japan) 423 | case ja_JP(String) 424 | /// Japanese 425 | case ja(String) 426 | /// Kabuverdianu (Cape Verde) 427 | case kea_CV(String) 428 | /// Kabuverdianu 429 | case kea(String) 430 | /// Kabyle (Algeria) 431 | case kab_DZ(String) 432 | /// Kabyle 433 | case kab(String) 434 | /// Kalaallisut (Greenland) 435 | case kl_GL(String) 436 | /// Kalaallisut 437 | case kl(String) 438 | /// Kalenjin (Kenya) 439 | case kln_KE(String) 440 | /// Kalenjin 441 | case kln(String) 442 | /// Kamba (Kenya) 443 | case kam_KE(String) 444 | /// Kamba 445 | case kam(String) 446 | /// Kannada (India) 447 | case kn_IN(String) 448 | /// Kannada 449 | case kn(String) 450 | /// Kazakh (Cyrillic) 451 | case kk_Cyrl(String) 452 | /// Kazakh (Cyrillic, Kazakhstan) 453 | case kk_Cyrl_KZ(String) 454 | /// Kazakh 455 | case kk(String) 456 | /// Khmer (Cambodia) 457 | case km_KH(String) 458 | /// Khmer 459 | case km(String) 460 | /// Kikuyu (Kenya) 461 | case ki_KE(String) 462 | /// Kikuyu 463 | case ki(String) 464 | /// Kinyarwanda (Rwanda) 465 | case rw_RW(String) 466 | /// Kinyarwanda 467 | case rw(String) 468 | /// Konkani (India) 469 | case kok_IN(String) 470 | /// Konkani 471 | case kok(String) 472 | /// Korean (South Korea) 473 | case ko_KR(String) 474 | /// Korean 475 | case ko(String) 476 | /// Koyra Chiini (Mali) 477 | case khq_ML(String) 478 | /// Koyra Chiini 479 | case khq(String) 480 | /// Koyraboro Senni (Mali) 481 | case ses_ML(String) 482 | /// Koyraboro Senni 483 | case ses(String) 484 | /// Langi (Tanzania) 485 | case lag_TZ(String) 486 | /// Langi 487 | case lag(String) 488 | /// Latvian (Latvia) 489 | case lv_LV(String) 490 | /// Latvian 491 | case lv(String) 492 | /// Lithuanian (Lithuania) 493 | case lt_LT(String) 494 | /// Lithuanian 495 | case lt(String) 496 | /// Luo (Kenya) 497 | case luo_KE(String) 498 | /// Luo 499 | case luo(String) 500 | /// Luyia (Kenya) 501 | case luy_KE(String) 502 | /// Luyia 503 | case luy(String) 504 | /// Macedonian (Macedonia) 505 | case mk_MK(String) 506 | /// Macedonian 507 | case mk(String) 508 | /// Machame (Tanzania) 509 | case jmc_TZ(String) 510 | /// Machame 511 | case jmc(String) 512 | /// Makonde (Tanzania) 513 | case kde_TZ(String) 514 | /// Makonde 515 | case kde(String) 516 | /// Malagasy (Madagascar) 517 | case mg_MG(String) 518 | /// Malagasy 519 | case mg(String) 520 | /// Malay (Brunei) 521 | case ms_BN(String) 522 | /// Malay (Malaysia) 523 | case ms_MY(String) 524 | /// Malay 525 | case ms(String) 526 | /// Malayalam (India) 527 | case ml_IN(String) 528 | /// Malayalam 529 | case ml(String) 530 | /// Maltese (Malta) 531 | case mt_MT(String) 532 | /// Maltese 533 | case mt(String) 534 | /// Manx (United Kingdom) 535 | case gv_GB(String) 536 | /// Manx 537 | case gv(String) 538 | /// Marathi (India) 539 | case mr_IN(String) 540 | /// Marathi 541 | case mr(String) 542 | /// Masai (Kenya) 543 | case mas_KE(String) 544 | /// Masai (Tanzania) 545 | case mas_TZ(String) 546 | /// Masai 547 | case mas(String) 548 | /// Meru (Kenya) 549 | case mer_KE(String) 550 | /// Meru 551 | case mer(String) 552 | /// Morisyen (Mauritius) 553 | case mfe_MU(String) 554 | /// Morisyen 555 | case mfe(String) 556 | /// Nama (Namibia) 557 | case naq_NA(String) 558 | /// Nama 559 | case naq(String) 560 | /// Nepali (India) 561 | case ne_IN(String) 562 | /// Nepali (Nepal) 563 | case ne_NP(String) 564 | /// Nepali 565 | case ne(String) 566 | /// North Ndebele (Zimbabwe) 567 | case nd_ZW(String) 568 | /// North Ndebele 569 | case nd(String) 570 | /// Norwegian Bokmål (Norway) 571 | case nb_NO(String) 572 | /// Norwegian Bokmål 573 | case nb(String) 574 | /// Norwegian Nynorsk (Norway) 575 | case nn_NO(String) 576 | /// Norwegian Nynorsk 577 | case nn(String) 578 | /// Nyankole (Uganda) 579 | case nyn_UG(String) 580 | /// Nyankole 581 | case nyn(String) 582 | /// Oriya (India) 583 | case or_IN(String) 584 | /// Oriya 585 | case or(String) 586 | /// Oromo (Ethiopia) 587 | case om_ET(String) 588 | /// Oromo (Kenya) 589 | case om_KE(String) 590 | /// Oromo 591 | case om(String) 592 | /// Pashto (Afghanistan) 593 | case ps_AF(String) 594 | /// Pashto 595 | case ps(String) 596 | /// Persian (Afghanistan) 597 | case fa_AF(String) 598 | /// Persian (Iran) 599 | case fa_IR(String) 600 | /// Persian 601 | case fa(String) 602 | /// Polish (Poland) 603 | case pl_PL(String) 604 | /// Polish 605 | case pl(String) 606 | /// Portuguese (Brazil) 607 | case pt_BR(String) 608 | /// Portuguese (Guinea-Bissau) 609 | case pt_GW(String) 610 | /// Portuguese (Mozambique) 611 | case pt_MZ(String) 612 | /// Portuguese (Portugal) 613 | case pt_PT(String) 614 | /// Portuguese 615 | case pt(String) 616 | /// Punjabi (Arabic) 617 | case pa_Arab(String) 618 | /// Punjabi (Arabic, Pakistan) 619 | case pa_Arab_PK(String) 620 | /// Punjabi (Gurmukhi) 621 | case pa_Guru(String) 622 | /// Punjabi (Gurmukhi, India) 623 | case pa_Guru_IN(String) 624 | /// Punjabi 625 | case pa(String) 626 | /// Romanian (Moldova) 627 | case ro_MD(String) 628 | /// Romanian (Romania) 629 | case ro_RO(String) 630 | /// Romanian 631 | case ro(String) 632 | /// Romansh (Switzerland) 633 | case rm_CH(String) 634 | /// Romansh 635 | case rm(String) 636 | /// Rombo (Tanzania) 637 | case rof_TZ(String) 638 | /// Rombo 639 | case rof(String) 640 | /// Russian (Moldova) 641 | case ru_MD(String) 642 | /// Russian (Russia) 643 | case ru_RU(String) 644 | /// Russian (Ukraine) 645 | case ru_UA(String) 646 | /// Russian 647 | case ru(String) 648 | /// Rwa (Tanzania) 649 | case rwk_TZ(String) 650 | /// Rwa 651 | case rwk(String) 652 | /// Samburu (Kenya) 653 | case saq_KE(String) 654 | /// Samburu 655 | case saq(String) 656 | /// Sango (Central African Republic) 657 | case sg_CF(String) 658 | /// Sango 659 | case sg(String) 660 | /// Sena (Mozambique) 661 | case seh_MZ(String) 662 | /// Sena 663 | case seh(String) 664 | /// Serbian (Cyrillic) 665 | case sr_Cyrl(String) 666 | /// Serbian (Cyrillic, Bosnia and Herzegovina) 667 | case sr_Cyrl_BA(String) 668 | /// Serbian (Cyrillic, Montenegro) 669 | case sr_Cyrl_ME(String) 670 | /// Serbian (Cyrillic, Serbia) 671 | case sr_Cyrl_RS(String) 672 | /// Serbian (Latin) 673 | case sr_Latn(String) 674 | /// Serbian (Latin, Bosnia and Herzegovina) 675 | case sr_Latn_BA(String) 676 | /// Serbian (Latin, Montenegro) 677 | case sr_Latn_ME(String) 678 | /// Serbian (Latin, Serbia) 679 | case sr_Latn_RS(String) 680 | /// Serbian 681 | case sr(String) 682 | /// Shona (Zimbabwe) 683 | case sn_ZW(String) 684 | /// Shona 685 | case sn(String) 686 | /// Sichuan Yi (China) 687 | case ii_CN(String) 688 | /// Sichuan Yi 689 | case ii(String) 690 | /// Sinhala (Sri Lanka) 691 | case si_LK(String) 692 | /// Sinhala 693 | case si(String) 694 | /// Slovak (Slovakia) 695 | case sk_SK(String) 696 | /// Slovak 697 | case sk(String) 698 | /// Slovenian (Slovenia) 699 | case sl_SI(String) 700 | /// Slovenian 701 | case sl(String) 702 | /// Soga (Uganda) 703 | case xog_UG(String) 704 | /// Soga 705 | case xog(String) 706 | /// Somali (Djibouti) 707 | case so_DJ(String) 708 | /// Somali (Ethiopia) 709 | case so_ET(String) 710 | /// Somali (Kenya) 711 | case so_KE(String) 712 | /// Somali (Somalia) 713 | case so_SO(String) 714 | /// Somali 715 | case so(String) 716 | /// Spanish (Argentina) 717 | case es_AR(String) 718 | /// Spanish (Bolivia) 719 | case es_BO(String) 720 | /// Spanish (Chile) 721 | case es_CL(String) 722 | /// Spanish (Colombia) 723 | case es_CO(String) 724 | /// Spanish (Costa Rica) 725 | case es_CR(String) 726 | /// Spanish (Dominican Republic) 727 | case es_DO(String) 728 | /// Spanish (Ecuador) 729 | case es_EC(String) 730 | /// Spanish (El Salvador) 731 | case es_SV(String) 732 | /// Spanish (Equatorial Guinea) 733 | case es_GQ(String) 734 | /// Spanish (Guatemala) 735 | case es_GT(String) 736 | /// Spanish (Honduras) 737 | case es_HN(String) 738 | /// Spanish (Latin America) 739 | case es_419(String) 740 | /// Spanish (Mexico) 741 | case es_MX(String) 742 | /// Spanish (Nicaragua) 743 | case es_NI(String) 744 | /// Spanish (Panama) 745 | case es_PA(String) 746 | /// Spanish (Paraguay) 747 | case es_PY(String) 748 | /// Spanish (Peru) 749 | case es_PE(String) 750 | /// Spanish (Puerto Rico) 751 | case es_PR(String) 752 | /// Spanish (Spain) 753 | case es_ES(String) 754 | /// Spanish (United States) 755 | case es_US(String) 756 | /// Spanish (Uruguay) 757 | case es_UY(String) 758 | /// Spanish (Venezuela) 759 | case es_VE(String) 760 | /// Spanish 761 | case es(String) 762 | /// Swahili (Kenya) 763 | case sw_KE(String) 764 | /// Swahili (Tanzania) 765 | case sw_TZ(String) 766 | /// Swahili 767 | case sw(String) 768 | /// Swedish (Finland) 769 | case sv_FI(String) 770 | /// Swedish (Sweden) 771 | case sv_SE(String) 772 | /// Swedish 773 | case sv(String) 774 | /// Swiss German (Switzerland) 775 | case gsw_CH(String) 776 | /// Swiss German 777 | case gsw(String) 778 | /// Tachelhit (Latin) 779 | case shi_Latn(String) 780 | /// Tachelhit (Latin, Morocco) 781 | case shi_Latn_MA(String) 782 | /// Tachelhit (Tifinagh) 783 | case shi_Tfng(String) 784 | /// Tachelhit (Tifinagh, Morocco) 785 | case shi_Tfng_MA(String) 786 | /// Tachelhit 787 | case shi(String) 788 | /// Taita (Kenya) 789 | case dav_KE(String) 790 | /// Taita 791 | case dav(String) 792 | /// Tamil (India) 793 | case ta_IN(String) 794 | /// Tamil (Sri Lanka) 795 | case ta_LK(String) 796 | /// Tamil 797 | case ta(String) 798 | /// Telugu (India) 799 | case te_IN(String) 800 | /// Telugu 801 | case te(String) 802 | /// Teso (Kenya) 803 | case teo_KE(String) 804 | /// Teso (Uganda) 805 | case teo_UG(String) 806 | /// Teso 807 | case teo(String) 808 | /// Thai (Thailand) 809 | case th_TH(String) 810 | /// Thai 811 | case th(String) 812 | /// Tibetan (China) 813 | case bo_CN(String) 814 | /// Tibetan (India) 815 | case bo_IN(String) 816 | /// Tibetan 817 | case bo(String) 818 | /// Tigrinya (Eritrea) 819 | case ti_ER(String) 820 | /// Tigrinya (Ethiopia) 821 | case ti_ET(String) 822 | /// Tigrinya 823 | case ti(String) 824 | /// Tonga (Tonga) 825 | case to_TO(String) 826 | /// Tonga 827 | case to(String) 828 | /// Turkish (Turkey) 829 | case tr_TR(String) 830 | /// Turkish 831 | case tr(String) 832 | /// Ukrainian (Ukraine) 833 | case uk_UA(String) 834 | /// Ukrainian 835 | case uk(String) 836 | /// Urdu (India) 837 | case ur_IN(String) 838 | /// Urdu (Pakistan) 839 | case ur_PK(String) 840 | /// Urdu 841 | case ur(String) 842 | /// Uzbek (Arabic) 843 | case uz_Arab(String) 844 | /// Uzbek (Arabic, Afghanistan) 845 | case uz_Arab_AF(String) 846 | /// Uzbek (Cyrillic) 847 | case uz_Cyrl(String) 848 | /// Uzbek (Cyrillic, Uzbekistan) 849 | case uz_Cyrl_UZ(String) 850 | /// Uzbek (Latin) 851 | case uz_Latn(String) 852 | /// Uzbek (Latin, Uzbekistan) 853 | case uz_Latn_UZ(String) 854 | /// Uzbek 855 | case uz(String) 856 | /// Vietnamese (Vietnam) 857 | case vi_VN(String) 858 | /// Vietnamese 859 | case vi(String) 860 | /// Vunjo (Tanzania) 861 | case vun_TZ(String) 862 | /// Vunjo 863 | case vun(String) 864 | /// Welsh (United Kingdom) 865 | case cy_GB(String) 866 | /// Welsh 867 | case cy(String) 868 | /// Yoruba (Nigeria) 869 | case yo_NG(String) 870 | /// Yoruba 871 | case yo(String) 872 | /// Zulu (South Africa) 873 | case zu_ZA(String) 874 | /// Zulu 875 | case zu(String) 876 | 877 | public var value: String { 878 | switch self { 879 | case .af_NA(let v): return v 880 | case .af_ZA(let v): return v 881 | case .af(let v): return v 882 | case .ak_GH(let v): return v 883 | case .ak(let v): return v 884 | case .sq_AL(let v): return v 885 | case .sq(let v): return v 886 | case .am_ET(let v): return v 887 | case .am(let v): return v 888 | case .ar_DZ(let v): return v 889 | case .ar_BH(let v): return v 890 | case .ar_EG(let v): return v 891 | case .ar_IQ(let v): return v 892 | case .ar_JO(let v): return v 893 | case .ar_KW(let v): return v 894 | case .ar_LB(let v): return v 895 | case .ar_LY(let v): return v 896 | case .ar_MA(let v): return v 897 | case .ar_OM(let v): return v 898 | case .ar_QA(let v): return v 899 | case .ar_SA(let v): return v 900 | case .ar_SD(let v): return v 901 | case .ar_SY(let v): return v 902 | case .ar_TN(let v): return v 903 | case .ar_AE(let v): return v 904 | case .ar_YE(let v): return v 905 | case .ar(let v): return v 906 | case .hy_AM(let v): return v 907 | case .hy(let v): return v 908 | case .as_IN(let v): return v 909 | case .`as`(let v): return v 910 | case .asa_TZ(let v): return v 911 | case .asa(let v): return v 912 | case .az_Cyrl(let v): return v 913 | case .az_Cyrl_AZ(let v): return v 914 | case .az_Latn(let v): return v 915 | case .az_Latn_AZ(let v): return v 916 | case .az(let v): return v 917 | case .bm_ML(let v): return v 918 | case .bm(let v): return v 919 | case .eu_ES(let v): return v 920 | case .eu(let v): return v 921 | case .be_BY(let v): return v 922 | case .be(let v): return v 923 | case .bem_ZM(let v): return v 924 | case .bem(let v): return v 925 | case .bez_TZ(let v): return v 926 | case .bez(let v): return v 927 | case .bn_BD(let v): return v 928 | case .bn_IN(let v): return v 929 | case .bn(let v): return v 930 | case .bs_BA(let v): return v 931 | case .bs(let v): return v 932 | case .bg_BG(let v): return v 933 | case .bg(let v): return v 934 | case .my_MM(let v): return v 935 | case .my(let v): return v 936 | case .yue_Hant_HK(let v): return v 937 | case .ca_ES(let v): return v 938 | case .ca(let v): return v 939 | case .tzm_Latn(let v): return v 940 | case .tzm_Latn_MA(let v): return v 941 | case .tzm(let v): return v 942 | case .chr_US(let v): return v 943 | case .chr(let v): return v 944 | case .cgg_UG(let v): return v 945 | case .cgg(let v): return v 946 | case .zh_Hans(let v): return v 947 | case .zh_Hans_CN(let v): return v 948 | case .zh_Hans_HK(let v): return v 949 | case .zh_Hans_MO(let v): return v 950 | case .zh_Hans_SG(let v): return v 951 | case .zh_Hant(let v): return v 952 | case .zh_Hant_HK(let v): return v 953 | case .zh_Hant_MO(let v): return v 954 | case .zh_Hant_TW(let v): return v 955 | case .zh(let v): return v 956 | case .kw_GB(let v): return v 957 | case .kw(let v): return v 958 | case .hr_HR(let v): return v 959 | case .hr(let v): return v 960 | case .cs_CZ(let v): return v 961 | case .cs(let v): return v 962 | case .da_DK(let v): return v 963 | case .da(let v): return v 964 | case .nl_BE(let v): return v 965 | case .nl_NL(let v): return v 966 | case .nl(let v): return v 967 | case .ebu_KE(let v): return v 968 | case .ebu(let v): return v 969 | case .en_AS(let v): return v 970 | case .en_AU(let v): return v 971 | case .en_BE(let v): return v 972 | case .en_BZ(let v): return v 973 | case .en_BW(let v): return v 974 | case .en_CA(let v): return v 975 | case .en_GU(let v): return v 976 | case .en_HK(let v): return v 977 | case .en_IN(let v): return v 978 | case .en_IE(let v): return v 979 | case .en_IL(let v): return v 980 | case .en_JM(let v): return v 981 | case .en_MT(let v): return v 982 | case .en_MH(let v): return v 983 | case .en_MU(let v): return v 984 | case .en_NA(let v): return v 985 | case .en_NZ(let v): return v 986 | case .en_MP(let v): return v 987 | case .en_PK(let v): return v 988 | case .en_PH(let v): return v 989 | case .en_SG(let v): return v 990 | case .en_ZA(let v): return v 991 | case .en_TT(let v): return v 992 | case .en_UM(let v): return v 993 | case .en_VI(let v): return v 994 | case .en_GB(let v): return v 995 | case .en_US(let v): return v 996 | case .en_ZW(let v): return v 997 | case .en(let v): return v 998 | case .eo(let v): return v 999 | case .et_EE(let v): return v 1000 | case .et(let v): return v 1001 | case .ee_GH(let v): return v 1002 | case .ee_TG(let v): return v 1003 | case .ee(let v): return v 1004 | case .fo_FO(let v): return v 1005 | case .fo(let v): return v 1006 | case .fil_PH(let v): return v 1007 | case .fil(let v): return v 1008 | case .fi_FI(let v): return v 1009 | case .fi(let v): return v 1010 | case .fr_BE(let v): return v 1011 | case .fr_BJ(let v): return v 1012 | case .fr_BF(let v): return v 1013 | case .fr_BI(let v): return v 1014 | case .fr_CM(let v): return v 1015 | case .fr_CA(let v): return v 1016 | case .fr_CF(let v): return v 1017 | case .fr_TD(let v): return v 1018 | case .fr_KM(let v): return v 1019 | case .fr_CG(let v): return v 1020 | case .fr_CD(let v): return v 1021 | case .fr_CI(let v): return v 1022 | case .fr_DJ(let v): return v 1023 | case .fr_GQ(let v): return v 1024 | case .fr_FR(let v): return v 1025 | case .fr_GA(let v): return v 1026 | case .fr_GP(let v): return v 1027 | case .fr_GN(let v): return v 1028 | case .fr_LU(let v): return v 1029 | case .fr_MG(let v): return v 1030 | case .fr_ML(let v): return v 1031 | case .fr_MQ(let v): return v 1032 | case .fr_MC(let v): return v 1033 | case .fr_NE(let v): return v 1034 | case .fr_RW(let v): return v 1035 | case .fr_RE(let v): return v 1036 | case .fr_BL(let v): return v 1037 | case .fr_MF(let v): return v 1038 | case .fr_SN(let v): return v 1039 | case .fr_CH(let v): return v 1040 | case .fr_TG(let v): return v 1041 | case .fr(let v): return v 1042 | case .ff_SN(let v): return v 1043 | case .ff(let v): return v 1044 | case .gl_ES(let v): return v 1045 | case .gl(let v): return v 1046 | case .lg_UG(let v): return v 1047 | case .lg(let v): return v 1048 | case .ka_GE(let v): return v 1049 | case .ka(let v): return v 1050 | case .de_AT(let v): return v 1051 | case .de_BE(let v): return v 1052 | case .de_DE(let v): return v 1053 | case .de_LI(let v): return v 1054 | case .de_LU(let v): return v 1055 | case .de_CH(let v): return v 1056 | case .de(let v): return v 1057 | case .el_CY(let v): return v 1058 | case .el_GR(let v): return v 1059 | case .el(let v): return v 1060 | case .gu_IN(let v): return v 1061 | case .gu(let v): return v 1062 | case .guz_KE(let v): return v 1063 | case .guz(let v): return v 1064 | case .ha_Latn(let v): return v 1065 | case .ha_Latn_GH(let v): return v 1066 | case .ha_Latn_NE(let v): return v 1067 | case .ha_Latn_NG(let v): return v 1068 | case .ha(let v): return v 1069 | case .haw_US(let v): return v 1070 | case .haw(let v): return v 1071 | case .he_IL(let v): return v 1072 | case .he(let v): return v 1073 | case .hi_IN(let v): return v 1074 | case .hi(let v): return v 1075 | case .hu_HU(let v): return v 1076 | case .hu(let v): return v 1077 | case .is_IS(let v): return v 1078 | case .`is`(let v): return v 1079 | case .ig_NG(let v): return v 1080 | case .ig(let v): return v 1081 | case .id_ID(let v): return v 1082 | case .id(let v): return v 1083 | case .ga_IE(let v): return v 1084 | case .ga(let v): return v 1085 | case .it_IT(let v): return v 1086 | case .it_CH(let v): return v 1087 | case .it(let v): return v 1088 | case .ja_JP(let v): return v 1089 | case .ja(let v): return v 1090 | case .kea_CV(let v): return v 1091 | case .kea(let v): return v 1092 | case .kab_DZ(let v): return v 1093 | case .kab(let v): return v 1094 | case .kl_GL(let v): return v 1095 | case .kl(let v): return v 1096 | case .kln_KE(let v): return v 1097 | case .kln(let v): return v 1098 | case .kam_KE(let v): return v 1099 | case .kam(let v): return v 1100 | case .kn_IN(let v): return v 1101 | case .kn(let v): return v 1102 | case .kk_Cyrl(let v): return v 1103 | case .kk_Cyrl_KZ(let v): return v 1104 | case .kk(let v): return v 1105 | case .km_KH(let v): return v 1106 | case .km(let v): return v 1107 | case .ki_KE(let v): return v 1108 | case .ki(let v): return v 1109 | case .rw_RW(let v): return v 1110 | case .rw(let v): return v 1111 | case .kok_IN(let v): return v 1112 | case .kok(let v): return v 1113 | case .ko_KR(let v): return v 1114 | case .ko(let v): return v 1115 | case .khq_ML(let v): return v 1116 | case .khq(let v): return v 1117 | case .ses_ML(let v): return v 1118 | case .ses(let v): return v 1119 | case .lag_TZ(let v): return v 1120 | case .lag(let v): return v 1121 | case .lv_LV(let v): return v 1122 | case .lv(let v): return v 1123 | case .lt_LT(let v): return v 1124 | case .lt(let v): return v 1125 | case .luo_KE(let v): return v 1126 | case .luo(let v): return v 1127 | case .luy_KE(let v): return v 1128 | case .luy(let v): return v 1129 | case .mk_MK(let v): return v 1130 | case .mk(let v): return v 1131 | case .jmc_TZ(let v): return v 1132 | case .jmc(let v): return v 1133 | case .kde_TZ(let v): return v 1134 | case .kde(let v): return v 1135 | case .mg_MG(let v): return v 1136 | case .mg(let v): return v 1137 | case .ms_BN(let v): return v 1138 | case .ms_MY(let v): return v 1139 | case .ms(let v): return v 1140 | case .ml_IN(let v): return v 1141 | case .ml(let v): return v 1142 | case .mt_MT(let v): return v 1143 | case .mt(let v): return v 1144 | case .gv_GB(let v): return v 1145 | case .gv(let v): return v 1146 | case .mr_IN(let v): return v 1147 | case .mr(let v): return v 1148 | case .mas_KE(let v): return v 1149 | case .mas_TZ(let v): return v 1150 | case .mas(let v): return v 1151 | case .mer_KE(let v): return v 1152 | case .mer(let v): return v 1153 | case .mfe_MU(let v): return v 1154 | case .mfe(let v): return v 1155 | case .naq_NA(let v): return v 1156 | case .naq(let v): return v 1157 | case .ne_IN(let v): return v 1158 | case .ne_NP(let v): return v 1159 | case .ne(let v): return v 1160 | case .nd_ZW(let v): return v 1161 | case .nd(let v): return v 1162 | case .nb_NO(let v): return v 1163 | case .nb(let v): return v 1164 | case .nn_NO(let v): return v 1165 | case .nn(let v): return v 1166 | case .nyn_UG(let v): return v 1167 | case .nyn(let v): return v 1168 | case .or_IN(let v): return v 1169 | case .or(let v): return v 1170 | case .om_ET(let v): return v 1171 | case .om_KE(let v): return v 1172 | case .om(let v): return v 1173 | case .ps_AF(let v): return v 1174 | case .ps(let v): return v 1175 | case .fa_AF(let v): return v 1176 | case .fa_IR(let v): return v 1177 | case .fa(let v): return v 1178 | case .pl_PL(let v): return v 1179 | case .pl(let v): return v 1180 | case .pt_BR(let v): return v 1181 | case .pt_GW(let v): return v 1182 | case .pt_MZ(let v): return v 1183 | case .pt_PT(let v): return v 1184 | case .pt(let v): return v 1185 | case .pa_Arab(let v): return v 1186 | case .pa_Arab_PK(let v): return v 1187 | case .pa_Guru(let v): return v 1188 | case .pa_Guru_IN(let v): return v 1189 | case .pa(let v): return v 1190 | case .ro_MD(let v): return v 1191 | case .ro_RO(let v): return v 1192 | case .ro(let v): return v 1193 | case .rm_CH(let v): return v 1194 | case .rm(let v): return v 1195 | case .rof_TZ(let v): return v 1196 | case .rof(let v): return v 1197 | case .ru_MD(let v): return v 1198 | case .ru_RU(let v): return v 1199 | case .ru_UA(let v): return v 1200 | case .ru(let v): return v 1201 | case .rwk_TZ(let v): return v 1202 | case .rwk(let v): return v 1203 | case .saq_KE(let v): return v 1204 | case .saq(let v): return v 1205 | case .sg_CF(let v): return v 1206 | case .sg(let v): return v 1207 | case .seh_MZ(let v): return v 1208 | case .seh(let v): return v 1209 | case .sr_Cyrl(let v): return v 1210 | case .sr_Cyrl_BA(let v): return v 1211 | case .sr_Cyrl_ME(let v): return v 1212 | case .sr_Cyrl_RS(let v): return v 1213 | case .sr_Latn(let v): return v 1214 | case .sr_Latn_BA(let v): return v 1215 | case .sr_Latn_ME(let v): return v 1216 | case .sr_Latn_RS(let v): return v 1217 | case .sr(let v): return v 1218 | case .sn_ZW(let v): return v 1219 | case .sn(let v): return v 1220 | case .ii_CN(let v): return v 1221 | case .ii(let v): return v 1222 | case .si_LK(let v): return v 1223 | case .si(let v): return v 1224 | case .sk_SK(let v): return v 1225 | case .sk(let v): return v 1226 | case .sl_SI(let v): return v 1227 | case .sl(let v): return v 1228 | case .xog_UG(let v): return v 1229 | case .xog(let v): return v 1230 | case .so_DJ(let v): return v 1231 | case .so_ET(let v): return v 1232 | case .so_KE(let v): return v 1233 | case .so_SO(let v): return v 1234 | case .so(let v): return v 1235 | case .es_AR(let v): return v 1236 | case .es_BO(let v): return v 1237 | case .es_CL(let v): return v 1238 | case .es_CO(let v): return v 1239 | case .es_CR(let v): return v 1240 | case .es_DO(let v): return v 1241 | case .es_EC(let v): return v 1242 | case .es_SV(let v): return v 1243 | case .es_GQ(let v): return v 1244 | case .es_GT(let v): return v 1245 | case .es_HN(let v): return v 1246 | case .es_419(let v): return v 1247 | case .es_MX(let v): return v 1248 | case .es_NI(let v): return v 1249 | case .es_PA(let v): return v 1250 | case .es_PY(let v): return v 1251 | case .es_PE(let v): return v 1252 | case .es_PR(let v): return v 1253 | case .es_ES(let v): return v 1254 | case .es_US(let v): return v 1255 | case .es_UY(let v): return v 1256 | case .es_VE(let v): return v 1257 | case .es(let v): return v 1258 | case .sw_KE(let v): return v 1259 | case .sw_TZ(let v): return v 1260 | case .sw(let v): return v 1261 | case .sv_FI(let v): return v 1262 | case .sv_SE(let v): return v 1263 | case .sv(let v): return v 1264 | case .gsw_CH(let v): return v 1265 | case .gsw(let v): return v 1266 | case .shi_Latn(let v): return v 1267 | case .shi_Latn_MA(let v): return v 1268 | case .shi_Tfng(let v): return v 1269 | case .shi_Tfng_MA(let v): return v 1270 | case .shi(let v): return v 1271 | case .dav_KE(let v): return v 1272 | case .dav(let v): return v 1273 | case .ta_IN(let v): return v 1274 | case .ta_LK(let v): return v 1275 | case .ta(let v): return v 1276 | case .te_IN(let v): return v 1277 | case .te(let v): return v 1278 | case .teo_KE(let v): return v 1279 | case .teo_UG(let v): return v 1280 | case .teo(let v): return v 1281 | case .th_TH(let v): return v 1282 | case .th(let v): return v 1283 | case .bo_CN(let v): return v 1284 | case .bo_IN(let v): return v 1285 | case .bo(let v): return v 1286 | case .ti_ER(let v): return v 1287 | case .ti_ET(let v): return v 1288 | case .ti(let v): return v 1289 | case .to_TO(let v): return v 1290 | case .to(let v): return v 1291 | case .tr_TR(let v): return v 1292 | case .tr(let v): return v 1293 | case .uk_UA(let v): return v 1294 | case .uk(let v): return v 1295 | case .ur_IN(let v): return v 1296 | case .ur_PK(let v): return v 1297 | case .ur(let v): return v 1298 | case .uz_Arab(let v): return v 1299 | case .uz_Arab_AF(let v): return v 1300 | case .uz_Cyrl(let v): return v 1301 | case .uz_Cyrl_UZ(let v): return v 1302 | case .uz_Latn(let v): return v 1303 | case .uz_Latn_UZ(let v): return v 1304 | case .uz(let v): return v 1305 | case .vi_VN(let v): return v 1306 | case .vi(let v): return v 1307 | case .vun_TZ(let v): return v 1308 | case .vun(let v): return v 1309 | case .cy_GB(let v): return v 1310 | case .cy(let v): return v 1311 | case .yo_NG(let v): return v 1312 | case .yo(let v): return v 1313 | case .zu_ZA(let v): return v 1314 | case .zu(let v): return v 1315 | } 1316 | } 1317 | 1318 | public var prefix: String { 1319 | return language.prefix 1320 | } 1321 | 1322 | public enum ValueType { 1323 | case short, long 1324 | } 1325 | 1326 | public var type: ValueType { 1327 | return value.components(separatedBy: "_").count == 0 ? .short : .long 1328 | } 1329 | 1330 | public var language: Language { 1331 | switch self { 1332 | case .af_NA: return .af_NA 1333 | case .af_ZA: return .af_ZA 1334 | case .af: return .af 1335 | case .ak_GH: return .ak_GH 1336 | case .ak: return .ak 1337 | case .sq_AL: return .sq_AL 1338 | case .sq: return .sq 1339 | case .am_ET: return .am_ET 1340 | case .am: return .am 1341 | case .ar_DZ: return .ar_DZ 1342 | case .ar_BH: return .ar_BH 1343 | case .ar_EG: return .ar_EG 1344 | case .ar_IQ: return .ar_IQ 1345 | case .ar_JO: return .ar_JO 1346 | case .ar_KW: return .ar_KW 1347 | case .ar_LB: return .ar_LB 1348 | case .ar_LY: return .ar_LY 1349 | case .ar_MA: return .ar_MA 1350 | case .ar_OM: return .ar_OM 1351 | case .ar_QA: return .ar_QA 1352 | case .ar_SA: return .ar_SA 1353 | case .ar_SD: return .ar_SD 1354 | case .ar_SY: return .ar_SY 1355 | case .ar_TN: return .ar_TN 1356 | case .ar_AE: return .ar_AE 1357 | case .ar_YE: return .ar_YE 1358 | case .ar: return .ar 1359 | case .hy_AM: return .hy_AM 1360 | case .hy: return .hy 1361 | case .as_IN: return .as_IN 1362 | case .as: return .as 1363 | case .asa_TZ: return .asa_TZ 1364 | case .asa: return .asa 1365 | case .az_Cyrl: return .az_Cyrl 1366 | case .az_Cyrl_AZ: return .az_Cyrl_AZ 1367 | case .az_Latn: return .az_Latn 1368 | case .az_Latn_AZ: return .az_Latn_AZ 1369 | case .az: return .az 1370 | case .bm_ML: return .bm_ML 1371 | case .bm: return .bm 1372 | case .eu_ES: return .eu_ES 1373 | case .eu: return .eu 1374 | case .be_BY: return .be_BY 1375 | case .be: return .be 1376 | case .bem_ZM: return .bem_ZM 1377 | case .bem: return .bem 1378 | case .bez_TZ: return .bez_TZ 1379 | case .bez: return .bez 1380 | case .bn_BD: return .bn_BD 1381 | case .bn_IN: return .bn_IN 1382 | case .bn: return .bn 1383 | case .bs_BA: return .bs_BA 1384 | case .bs: return .bs 1385 | case .bg_BG: return .bg_BG 1386 | case .bg: return .bg 1387 | case .my_MM: return .my_MM 1388 | case .my: return .my 1389 | case .yue_Hant_HK: return .yue_Hant_HK 1390 | case .ca_ES: return .ca_ES 1391 | case .ca: return .ca 1392 | case .tzm_Latn: return .tzm_Latn 1393 | case .tzm_Latn_MA: return .tzm_Latn_MA 1394 | case .tzm: return .tzm 1395 | case .chr_US: return .chr_US 1396 | case .chr: return .chr 1397 | case .cgg_UG: return .cgg_UG 1398 | case .cgg: return .cgg 1399 | case .zh_Hans: return .zh_Hans 1400 | case .zh_Hans_CN: return .zh_Hans_CN 1401 | case .zh_Hans_HK: return .zh_Hans_HK 1402 | case .zh_Hans_MO: return .zh_Hans_MO 1403 | case .zh_Hans_SG: return .zh_Hans_SG 1404 | case .zh_Hant: return .zh_Hant 1405 | case .zh_Hant_HK: return .zh_Hant_HK 1406 | case .zh_Hant_MO: return .zh_Hant_MO 1407 | case .zh_Hant_TW: return .zh_Hant_TW 1408 | case .zh: return .zh 1409 | case .kw_GB: return .kw_GB 1410 | case .kw: return .kw 1411 | case .hr_HR: return .hr_HR 1412 | case .hr: return .hr 1413 | case .cs_CZ: return .cs_CZ 1414 | case .cs: return .cs 1415 | case .da_DK: return .da_DK 1416 | case .da: return .da 1417 | case .nl_BE: return .nl_BE 1418 | case .nl_NL: return .nl_NL 1419 | case .nl: return .nl 1420 | case .ebu_KE: return .ebu_KE 1421 | case .ebu: return .ebu 1422 | case .en_AS: return .en_AS 1423 | case .en_AU: return .en_AU 1424 | case .en_BE: return .en_BE 1425 | case .en_BZ: return .en_BZ 1426 | case .en_BW: return .en_BW 1427 | case .en_CA: return .en_CA 1428 | case .en_GU: return .en_GU 1429 | case .en_HK: return .en_HK 1430 | case .en_IN: return .en_IN 1431 | case .en_IE: return .en_IE 1432 | case .en_IL: return .en_IL 1433 | case .en_JM: return .en_JM 1434 | case .en_MT: return .en_MT 1435 | case .en_MH: return .en_MH 1436 | case .en_MU: return .en_MU 1437 | case .en_NA: return .en_NA 1438 | case .en_NZ: return .en_NZ 1439 | case .en_MP: return .en_MP 1440 | case .en_PK: return .en_PK 1441 | case .en_PH: return .en_PH 1442 | case .en_SG: return .en_SG 1443 | case .en_ZA: return .en_ZA 1444 | case .en_TT: return .en_TT 1445 | case .en_UM: return .en_UM 1446 | case .en_VI: return .en_VI 1447 | case .en_GB: return .en_GB 1448 | case .en_US: return .en_US 1449 | case .en_ZW: return .en_ZW 1450 | case .en: return .en 1451 | case .eo: return .eo 1452 | case .et_EE: return .et_EE 1453 | case .et: return .et 1454 | case .ee_GH: return .ee_GH 1455 | case .ee_TG: return .ee_TG 1456 | case .ee: return .ee 1457 | case .fo_FO: return .fo_FO 1458 | case .fo: return .fo 1459 | case .fil_PH: return .fil_PH 1460 | case .fil: return .fil 1461 | case .fi_FI: return .fi_FI 1462 | case .fi: return .fi 1463 | case .fr_BE: return .fr_BE 1464 | case .fr_BJ: return .fr_BJ 1465 | case .fr_BF: return .fr_BF 1466 | case .fr_BI: return .fr_BI 1467 | case .fr_CM: return .fr_CM 1468 | case .fr_CA: return .fr_CA 1469 | case .fr_CF: return .fr_CF 1470 | case .fr_TD: return .fr_TD 1471 | case .fr_KM: return .fr_KM 1472 | case .fr_CG: return .fr_CG 1473 | case .fr_CD: return .fr_CD 1474 | case .fr_CI: return .fr_CI 1475 | case .fr_DJ: return .fr_DJ 1476 | case .fr_GQ: return .fr_GQ 1477 | case .fr_FR: return .fr_FR 1478 | case .fr_GA: return .fr_GA 1479 | case .fr_GP: return .fr_GP 1480 | case .fr_GN: return .fr_GN 1481 | case .fr_LU: return .fr_LU 1482 | case .fr_MG: return .fr_MG 1483 | case .fr_ML: return .fr_ML 1484 | case .fr_MQ: return .fr_MQ 1485 | case .fr_MC: return .fr_MC 1486 | case .fr_NE: return .fr_NE 1487 | case .fr_RW: return .fr_RW 1488 | case .fr_RE: return .fr_RE 1489 | case .fr_BL: return .fr_BL 1490 | case .fr_MF: return .fr_MF 1491 | case .fr_SN: return .fr_SN 1492 | case .fr_CH: return .fr_CH 1493 | case .fr_TG: return .fr_TG 1494 | case .fr: return .fr 1495 | case .ff_SN: return .ff_SN 1496 | case .ff: return .ff 1497 | case .gl_ES: return .gl_ES 1498 | case .gl: return .gl 1499 | case .lg_UG: return .lg_UG 1500 | case .lg: return .lg 1501 | case .ka_GE: return .ka_GE 1502 | case .ka: return .ka 1503 | case .de_AT: return .de_AT 1504 | case .de_BE: return .de_BE 1505 | case .de_DE: return .de_DE 1506 | case .de_LI: return .de_LI 1507 | case .de_LU: return .de_LU 1508 | case .de_CH: return .de_CH 1509 | case .de: return .de 1510 | case .el_CY: return .el_CY 1511 | case .el_GR: return .el_GR 1512 | case .el: return .el 1513 | case .gu_IN: return .gu_IN 1514 | case .gu: return .gu 1515 | case .guz_KE: return .guz_KE 1516 | case .guz: return .guz 1517 | case .ha_Latn: return .ha_Latn 1518 | case .ha_Latn_GH: return .ha_Latn_GH 1519 | case .ha_Latn_NE: return .ha_Latn_NE 1520 | case .ha_Latn_NG: return .ha_Latn_NG 1521 | case .ha: return .ha 1522 | case .haw_US: return .haw_US 1523 | case .haw: return .haw 1524 | case .he_IL: return .he_IL 1525 | case .he: return .he 1526 | case .hi_IN: return .hi_IN 1527 | case .hi: return .hi 1528 | case .hu_HU: return .hu_HU 1529 | case .hu: return .hu 1530 | case .is_IS: return .is_IS 1531 | case .is: return .is 1532 | case .ig_NG: return .ig_NG 1533 | case .ig: return .ig 1534 | case .id_ID: return .id_ID 1535 | case .id: return .id 1536 | case .ga_IE: return .ga_IE 1537 | case .ga: return .ga 1538 | case .it_IT: return .it_IT 1539 | case .it_CH: return .it_CH 1540 | case .it: return .it 1541 | case .ja_JP: return .ja_JP 1542 | case .ja: return .ja 1543 | case .kea_CV: return .kea_CV 1544 | case .kea: return .kea 1545 | case .kab_DZ: return .kab_DZ 1546 | case .kab: return .kab 1547 | case .kl_GL: return .kl_GL 1548 | case .kl: return .kl 1549 | case .kln_KE: return .kln_KE 1550 | case .kln: return .kln 1551 | case .kam_KE: return .kam_KE 1552 | case .kam: return .kam 1553 | case .kn_IN: return .kn_IN 1554 | case .kn: return .kn 1555 | case .kk_Cyrl: return .kk_Cyrl 1556 | case .kk_Cyrl_KZ: return .kk_Cyrl_KZ 1557 | case .kk: return .kk 1558 | case .km_KH: return .km_KH 1559 | case .km: return .km 1560 | case .ki_KE: return .ki_KE 1561 | case .ki: return .ki 1562 | case .rw_RW: return .rw_RW 1563 | case .rw: return .rw 1564 | case .kok_IN: return .kok_IN 1565 | case .kok: return .kok 1566 | case .ko_KR: return .ko_KR 1567 | case .ko: return .ko 1568 | case .khq_ML: return .khq_ML 1569 | case .khq: return .khq 1570 | case .ses_ML: return .ses_ML 1571 | case .ses: return .ses 1572 | case .lag_TZ: return .lag_TZ 1573 | case .lag: return .lag 1574 | case .lv_LV: return .lv_LV 1575 | case .lv: return .lv 1576 | case .lt_LT: return .lt_LT 1577 | case .lt: return .lt 1578 | case .luo_KE: return .luo_KE 1579 | case .luo: return .luo 1580 | case .luy_KE: return .luy_KE 1581 | case .luy: return .luy 1582 | case .mk_MK: return .mk_MK 1583 | case .mk: return .mk 1584 | case .jmc_TZ: return .jmc_TZ 1585 | case .jmc: return .jmc 1586 | case .kde_TZ: return .kde_TZ 1587 | case .kde: return .kde 1588 | case .mg_MG: return .mg_MG 1589 | case .mg: return .mg 1590 | case .ms_BN: return .ms_BN 1591 | case .ms_MY: return .ms_MY 1592 | case .ms: return .ms 1593 | case .ml_IN: return .ml_IN 1594 | case .ml: return .ml 1595 | case .mt_MT: return .mt_MT 1596 | case .mt: return .mt 1597 | case .gv_GB: return .gv_GB 1598 | case .gv: return .gv 1599 | case .mr_IN: return .mr_IN 1600 | case .mr: return .mr 1601 | case .mas_KE: return .mas_KE 1602 | case .mas_TZ: return .mas_TZ 1603 | case .mas: return .mas 1604 | case .mer_KE: return .mer_KE 1605 | case .mer: return .mer 1606 | case .mfe_MU: return .mfe_MU 1607 | case .mfe: return .mfe 1608 | case .naq_NA: return .naq_NA 1609 | case .naq: return .naq 1610 | case .ne_IN: return .ne_IN 1611 | case .ne_NP: return .ne_NP 1612 | case .ne: return .ne 1613 | case .nd_ZW: return .nd_ZW 1614 | case .nd: return .nd 1615 | case .nb_NO: return .nb_NO 1616 | case .nb: return .nb 1617 | case .nn_NO: return .nn_NO 1618 | case .nn: return .nn 1619 | case .nyn_UG: return .nyn_UG 1620 | case .nyn: return .nyn 1621 | case .or_IN: return .or_IN 1622 | case .or: return .or 1623 | case .om_ET: return .om_ET 1624 | case .om_KE: return .om_KE 1625 | case .om: return .om 1626 | case .ps_AF: return .ps_AF 1627 | case .ps: return .ps 1628 | case .fa_AF: return .fa_AF 1629 | case .fa_IR: return .fa_IR 1630 | case .fa: return .fa 1631 | case .pl_PL: return .pl_PL 1632 | case .pl: return .pl 1633 | case .pt_BR: return .pt_BR 1634 | case .pt_GW: return .pt_GW 1635 | case .pt_MZ: return .pt_MZ 1636 | case .pt_PT: return .pt_PT 1637 | case .pt: return .pt 1638 | case .pa_Arab: return .pa_Arab 1639 | case .pa_Arab_PK: return .pa_Arab_PK 1640 | case .pa_Guru: return .pa_Guru 1641 | case .pa_Guru_IN: return .pa_Guru_IN 1642 | case .pa: return .pa 1643 | case .ro_MD: return .ro_MD 1644 | case .ro_RO: return .ro_RO 1645 | case .ro: return .ro 1646 | case .rm_CH: return .rm_CH 1647 | case .rm: return .rm 1648 | case .rof_TZ: return .rof_TZ 1649 | case .rof: return .rof 1650 | case .ru_MD: return .ru_MD 1651 | case .ru_RU: return .ru_RU 1652 | case .ru_UA: return .ru_UA 1653 | case .ru: return .ru 1654 | case .rwk_TZ: return .rwk_TZ 1655 | case .rwk: return .rwk 1656 | case .saq_KE: return .saq_KE 1657 | case .saq: return .saq 1658 | case .sg_CF: return .sg_CF 1659 | case .sg: return .sg 1660 | case .seh_MZ: return .seh_MZ 1661 | case .seh: return .seh 1662 | case .sr_Cyrl: return .sr_Cyrl 1663 | case .sr_Cyrl_BA: return .sr_Cyrl_BA 1664 | case .sr_Cyrl_ME: return .sr_Cyrl_ME 1665 | case .sr_Cyrl_RS: return .sr_Cyrl_RS 1666 | case .sr_Latn: return .sr_Latn 1667 | case .sr_Latn_BA: return .sr_Latn_BA 1668 | case .sr_Latn_ME: return .sr_Latn_ME 1669 | case .sr_Latn_RS: return .sr_Latn_RS 1670 | case .sr: return .sr 1671 | case .sn_ZW: return .sn_ZW 1672 | case .sn: return .sn 1673 | case .ii_CN: return .ii_CN 1674 | case .ii: return .ii 1675 | case .si_LK: return .si_LK 1676 | case .si: return .si 1677 | case .sk_SK: return .sk_SK 1678 | case .sk: return .sk 1679 | case .sl_SI: return .sl_SI 1680 | case .sl: return .sl 1681 | case .xog_UG: return .xog_UG 1682 | case .xog: return .xog 1683 | case .so_DJ: return .so_DJ 1684 | case .so_ET: return .so_ET 1685 | case .so_KE: return .so_KE 1686 | case .so_SO: return .so_SO 1687 | case .so: return .so 1688 | case .es_AR: return .es_AR 1689 | case .es_BO: return .es_BO 1690 | case .es_CL: return .es_CL 1691 | case .es_CO: return .es_CO 1692 | case .es_CR: return .es_CR 1693 | case .es_DO: return .es_DO 1694 | case .es_EC: return .es_EC 1695 | case .es_SV: return .es_SV 1696 | case .es_GQ: return .es_GQ 1697 | case .es_GT: return .es_GT 1698 | case .es_HN: return .es_HN 1699 | case .es_419: return .es_419 1700 | case .es_MX: return .es_MX 1701 | case .es_NI: return .es_NI 1702 | case .es_PA: return .es_PA 1703 | case .es_PY: return .es_PY 1704 | case .es_PE: return .es_PE 1705 | case .es_PR: return .es_PR 1706 | case .es_ES: return .es_ES 1707 | case .es_US: return .es_US 1708 | case .es_UY: return .es_UY 1709 | case .es_VE: return .es_VE 1710 | case .es: return .es 1711 | case .sw_KE: return .sw_KE 1712 | case .sw_TZ: return .sw_TZ 1713 | case .sw: return .sw 1714 | case .sv_FI: return .sv_FI 1715 | case .sv_SE: return .sv_SE 1716 | case .sv: return .sv 1717 | case .gsw_CH: return .gsw_CH 1718 | case .gsw: return .gsw 1719 | case .shi_Latn: return .shi_Latn 1720 | case .shi_Latn_MA: return .shi_Latn_MA 1721 | case .shi_Tfng: return .shi_Tfng 1722 | case .shi_Tfng_MA: return .shi_Tfng_MA 1723 | case .shi: return .shi 1724 | case .dav_KE: return .dav_KE 1725 | case .dav: return .dav 1726 | case .ta_IN: return .ta_IN 1727 | case .ta_LK: return .ta_LK 1728 | case .ta: return .ta 1729 | case .te_IN: return .te_IN 1730 | case .te: return .te 1731 | case .teo_KE: return .teo_KE 1732 | case .teo_UG: return .teo_UG 1733 | case .teo: return .teo 1734 | case .th_TH: return .th_TH 1735 | case .th: return .th 1736 | case .bo_CN: return .bo_CN 1737 | case .bo_IN: return .bo_IN 1738 | case .bo: return .bo 1739 | case .ti_ER: return .ti_ER 1740 | case .ti_ET: return .ti_ET 1741 | case .ti: return .ti 1742 | case .to_TO: return .to_TO 1743 | case .to: return .to 1744 | case .tr_TR: return .tr_TR 1745 | case .tr: return .tr 1746 | case .uk_UA: return .uk_UA 1747 | case .uk: return .uk 1748 | case .ur_IN: return .ur_IN 1749 | case .ur_PK: return .ur_PK 1750 | case .ur: return .ur 1751 | case .uz_Arab: return .uz_Arab 1752 | case .uz_Arab_AF: return .uz_Arab_AF 1753 | case .uz_Cyrl: return .uz_Cyrl 1754 | case .uz_Cyrl_UZ: return .uz_Cyrl_UZ 1755 | case .uz_Latn: return .uz_Latn 1756 | case .uz_Latn_UZ: return .uz_Latn_UZ 1757 | case .uz: return .uz 1758 | case .vi_VN: return .vi_VN 1759 | case .vi: return .vi 1760 | case .vun_TZ: return .vun_TZ 1761 | case .vun: return .vun 1762 | case .cy_GB: return .cy_GB 1763 | case .cy: return .cy 1764 | case .yo_NG: return .yo_NG 1765 | case .yo: return .yo 1766 | case .zu_ZA: return .zu_ZA 1767 | case .zu: return .zu 1768 | } 1769 | } 1770 | } 1771 | -------------------------------------------------------------------------------- /Classes/Localizer.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | private var localizer = Localizer() 4 | 5 | public final class Localizer: Localizable { 6 | public static var localeKey: LocaleKey? { return \.locale } 7 | 8 | var locale: String? { 9 | return currentLocale.identifier 10 | } 11 | 12 | let currentLocale = Locale.current 13 | 14 | var defaultLanguage: Language = .en 15 | 16 | lazy var currentLanguage: Language = detectCurrentLanguage() 17 | 18 | func detectCurrentLanguage() -> Language { 19 | if let language = Language(rawValue: currentLocale.identifier) { 20 | return language 21 | } 22 | if let locale = currentLocale.identifier.components(separatedBy: "_").first, let language = Language(rawValue: locale) { 23 | return language 24 | } 25 | return defaultLanguage 26 | } 27 | 28 | static var shared: Localizer { 29 | return localizer 30 | } 31 | 32 | public static var current: Language { 33 | get { 34 | return shared.currentLanguage 35 | } 36 | set { 37 | shared.currentLanguage = newValue 38 | } 39 | } 40 | 41 | public static var `default`: Language { 42 | get { 43 | return shared.defaultLanguage 44 | } 45 | set { 46 | shared.defaultLanguage = newValue 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Classes/String+LocalizedString.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | extension String { 4 | private var localePrefix: String { 5 | return components(separatedBy: "_").first ?? self 6 | } 7 | 8 | public init (_ ls: LocalizedString...) { 9 | self.init(for: Localizer.shared, ls) 10 | } 11 | 12 | public init (for localizable: L, _ ls: LocalizedString...) { 13 | self.init(for: localizable, ls) 14 | } 15 | 16 | public init (_ ls: [LocalizedString]) { 17 | self.init(for: Localizer.shared, ls) 18 | } 19 | 20 | public init (for localizable: L, _ ls: [LocalizedString]) { 21 | guard ls.count > 0 else { 22 | self.init("") 23 | print("⚠️ Localization: ❌ EMPTY STRING") 24 | return 25 | } 26 | guard let currentLocale = localizable.locale else { 27 | self.init("") 28 | print("⚠️ Localization: ❌ NIL LOCALE IN LOCALIZABLE OBJECT") 29 | return 30 | } 31 | var lsByPrefix: LocalizedString? 32 | for ls in ls { 33 | switch ls.type { 34 | case .short: 35 | if currentLocale.starts(with: ls.language.rawValue) { 36 | self.init(ls.value) 37 | return 38 | } 39 | case .long: 40 | if ls.language.rawValue == currentLocale { 41 | self.init(ls.value) 42 | return 43 | } else if ls.prefix == currentLocale.localePrefix { 44 | lsByPrefix = ls 45 | } 46 | } 47 | } 48 | if let ls = lsByPrefix { 49 | self.init(ls.value) 50 | return 51 | } 52 | if let ls = ls.first(where: { 53 | $0.language.rawValue.contains(Localizer.default.rawValue) 54 | || $0.prefix == Localizer.default.prefix }) { 55 | self.init(ls.value) 56 | return 57 | } 58 | self.init("❔❔❔") 59 | print("⚠️ Localizer: ❌ UNABLE TO DETECT LOCALE 🤬 set breakpoint here to find that string (current locale: \(Localizer.current)") 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 MihaelIsaev 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Localizer.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod lib lint UIKit-Plus.podspec' to ensure this is a 3 | # valid spec before submitting. 4 | # 5 | # Any lines starting with a # are optional, but their use is encouraged 6 | # To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html 7 | # 8 | 9 | Pod::Spec.new do |s| 10 | s.name = 'Localizer' 11 | s.module_name = 'Localizer' 12 | s.version = '1.0.2' 13 | s.summary = '🇮🇸🇩🇪🇯🇵🇲🇽Swift localization helper' 14 | 15 | s.swift_version = '4.2' 16 | 17 | # This description is used to generate tags and improve search results. 18 | # * Think: What does it do? Why did you write it? What is the focus? 19 | # * Try to keep it short, snappy and to the point. 20 | # * Write the description between the DESC delimiters below. 21 | # * Finally, don't worry about the indent, CocoaPods strips it! 22 | 23 | s.description = 'Easily localize any iOS or even server-side project' 24 | 25 | s.homepage = 'https://github.com/MihaelIsaev/UIKitPlus' 26 | # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' 27 | s.license = { :type => 'MIT', :file => 'LICENSE' } 28 | s.author = { 'MihaelIsaev' => 'isaev.mihael@gmail.com' } 29 | s.source = { :git => 'https://github.com/MihaelIsaev/Localizer.git', :tag => s.version.to_s } 30 | 31 | s.ios.deployment_target = '9.0' 32 | 33 | s.source_files = 'Classes/**/*' 34 | 35 | # s.resource_bundles = { 36 | # 'UIKitPlus' => ['UIKitPlus/Assets/*.png'] 37 | # } 38 | 39 | # s.public_header_files = 'Pod/Classes/**/*.h' 40 | s.frameworks = 'Foundation' 41 | end 42 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:4.2 2 | 3 | import PackageDescription 4 | 5 | let package = Package( 6 | name: "Localizer", 7 | products: [ 8 | .library(name: "Localizer", targets: ["Localizer"]), 9 | ], 10 | dependencies: [], 11 | targets: [ 12 | .target(name: "Localizer", dependencies: [], path: "Classes"), 13 | .testTarget(name: "LocalizerTests", dependencies: ["Localizer"]), 14 | ] 15 | ) 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | MIT License 4 | 5 | 6 | Swift 4.2 7 | 8 | 9 | Cocoapod 10 | 11 | 12 | Swift.Stream 13 | 14 |

15 | 16 |
17 | 18 | # Localizer 19 | 20 | Install through Swift Package Manager 21 | 22 | ```swift 23 | .package(url: "https://github.com/MihaelIsaev/Localizer.git", from: "1.0.2") 24 | ``` 25 | 26 | or CocoaPods 27 | 28 | ``` 29 | pod 'Localizer', '~> 1.0.2' 30 | ``` 31 | 32 | # How to use 33 | 34 | The most important part is to import it 🚀 35 | ```swift 36 | import Localizer 37 | ``` 38 | 39 | ### iOS 40 | 41 | ```swift 42 | // create string relative to current language 43 | let myString = String( 44 | .en("Hello"), 45 | .fr("Bonjour"), 46 | .ru("Привет"), 47 | .es("Hola"), 48 | .zh_Hans("你好"), 49 | .ja("こんにちは")) 50 | print(myString) 51 | ``` 52 | 53 | By default current language is equal to `Locale.current` but you can change it by setting `Localizer.current = .en`. 54 | Also localizer have `default` language in case if user's language doesn't match any in your string, and you could set it just by calling `Localizer.default = .en`. 55 | 56 | ### Server-side 57 | 58 | On server-side we can't detect user's locale through `Locale.current` cause this way we will get server's locale :) 59 | 60 | So e.g. if we have `User` model on server which is have `locale` string variable we could use it. For that we should conform `User` to `Localizable` like this 61 | 62 | ```swift 63 | class User: Localizable { 64 | // declare this as a link to locale variable in this model 65 | static var localeKey: LocaleKey? { return \.locale } 66 | 67 | var id: UUID 68 | var email, password: String 69 | 70 | /// this variable will be used for Localizer to detect language 71 | /// it should contain e.g. short `en` or long `en_US` value 72 | var locale: String? 73 | } 74 | ``` 75 | then declare your localized strings with `user` obejct like this 76 | ```swift 77 | let myString = String(for: user, 78 | .en("Hello"), 79 | .fr("Bonjour"), 80 | .ru("Привет"), 81 | .es("Hola"), 82 | .zh_Hans("你好"), 83 | .ja("こんにちは")) 84 | print(myString) 85 | ``` 86 | 87 | Easy, right? :) Would be great if you could give it a star ⭐️ 88 | -------------------------------------------------------------------------------- /Tests/LinuxMain.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | import LocalizerTests 4 | 5 | var tests = [XCTestCaseEntry]() 6 | tests += LocalizerTests.allTests() 7 | XCTMain(tests) 8 | -------------------------------------------------------------------------------- /Tests/LocalizerTests/LocalizerTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | @testable import Localizer 3 | 4 | final class LocalizerTests: XCTestCase { 5 | func testExample() { 6 | // This is an example of a functional test case. 7 | // Use XCTAssert and related functions to verify your tests produce the correct 8 | // results. 9 | XCTAssertEqual(Localizer().text, "Hello, World!") 10 | } 11 | 12 | static var allTests = [ 13 | ("testExample", testExample), 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /Tests/LocalizerTests/XCTestManifests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | #if !canImport(ObjectiveC) 4 | public func allTests() -> [XCTestCaseEntry] { 5 | return [ 6 | testCase(LocalizerTests.allTests), 7 | ] 8 | } 9 | #endif 10 | --------------------------------------------------------------------------------