Skip to content

Instantly share code, notes, and snippets.

@rijieli
Created December 6, 2024 10:01
Show Gist options
  • Save rijieli/ff8b2226329f4a10a3ebab4d2c3bc85f to your computer and use it in GitHub Desktop.
Save rijieli/ff8b2226329f4a10a3ebab4d2c3bc85f to your computer and use it in GitHub Desktop.
BCP 47 List From iOS Firmware
<001: world>
<002: Africa>
<005: South America>
<009: Oceania>
<011: Western Africa>
<013: Central America>
<014: Eastern Africa>
<015: Northern Africa>
<017: Middle Africa>
<018: Southern Africa>
<019: Americas>
<021: Northern America>
<029: Caribbean>
<030: Eastern Asia>
<034: Southern Asia>
<035: Southeast Asia>
<039: Southern Europe>
<053: Australasia>
<054: Melanesia>
<057: Micronesian Region>
<061: Polynesia>
<142: Asia>
<143: Central Asia>
<145: Western Asia>
<150: Europe>
<151: Eastern Europe>
<154: Northern Europe>
<155: Western Europe>
<AC: Ascension Island>
<AD: Andorra>
<AE: United Arab Emirates>
<AF: Afghanistan>
<AG: Antigua & Barbuda>
<AI: Anguilla>
<AL: Albania>
<AM: Armenia>
<AO: Angola>
<AQ: Antarctica>
<AR: Argentina>
<AS: American Samoa>
<AT: Austria>
<AU: Australia>
<AW: Aruba>
<AX: Åland Islands>
<AZ: Azerbaijan>
<BA: Bosnia & Herzegovina>
<BB: Barbados>
<BD: Bangladesh>
<BE: Belgium>
<BF: Burkina Faso>
<BG: Bulgaria>
<BH: Bahrain>
<BI: Burundi>
<BJ: Benin>
<BL: St. Barthélemy>
<BM: Bermuda>
<BN: Brunei>
<BO: Bolivia>
<BQ: Caribbean Netherlands>
<BR: Brazil>
<BS: Bahamas>
<BT: Bhutan>
<BV: Bouvet Island>
<BW: Botswana>
<BY: Belarus>
<BZ: Belize>
<CA: Canada>
<CC: Cocos (Keeling) Islands>
<CD: Congo - Kinshasa>
<CF: Central African Republic>
<CG: Congo - Brazzaville>
<CH: Switzerland>
<CI: Côte d’Ivoire>
<CK: Cook Islands>
<CL: Chile>
<CM: Cameroon>
<CN: China mainland>
<CO: Colombia>
<CP: Clipperton Island>
<CQ: Sark>
<CR: Costa Rica>
<CU: Cuba>
<CV: Cape Verde>
<CW: Curaçao>
<CX: Christmas Island>
<CY: Cyprus>
<CZ: Czechia>
<DE: Germany>
<DG: Diego Garcia>
<DJ: Djibouti>
<DK: Denmark>
<DM: Dominica>
<DO: Dominican Republic>
<DZ: Algeria>
<EA: Ceuta & Melilla>
<EC: Ecuador>
<EE: Estonia>
<EG: Egypt>
<EH: Western Sahara>
<ER: Eritrea>
<ES: Spain>
<ET: Ethiopia>
<FI: Finland>
<FJ: Fiji>
<FK: Falkland Islands>
<FM: Micronesia>
<FO: Faroe Islands>
<FR: France>
<GA: Gabon>
<GB: United Kingdom>
<GD: Grenada>
<GE: Georgia>
<GF: French Guiana>
<GG: Guernsey>
<GH: Ghana>
<GI: Gibraltar>
<GL: Greenland>
<GM: Gambia>
<GN: Guinea>
<GP: Guadeloupe>
<GQ: Equatorial Guinea>
<GR: Greece>
<GS: So. Georgia & So. Sandwich Isl.>
<GT: Guatemala>
<GU: Guam>
<GW: Guinea-Bissau>
<GY: Guyana>
<HK: Hong Kong>
<HM: Heard & McDonald Islands>
<HN: Honduras>
<HR: Croatia>
<HT: Haiti>
<HU: Hungary>
<IC: Canary Islands>
<ID: Indonesia>
<IE: Ireland>
<IL: Israel>
<IM: Isle of Man>
<IN: India>
<IO: Chagos Archipelago>
<IQ: Iraq>
<IR: Iran>
<IS: Iceland>
<IT: Italy>
<JE: Jersey>
<JM: Jamaica>
<JO: Jordan>
<JP: Japan>
<KE: Kenya>
<KG: Kyrgyzstan>
<KH: Cambodia>
<KI: Kiribati>
<KM: Comoros>
<KN: St. Kitts & Nevis>
<KP: North Korea>
<KR: South Korea>
<KW: Kuwait>
<KY: Cayman Islands>
<KZ: Kazakhstan>
<LA: Laos>
<LB: Lebanon>
<LC: St. Lucia>
<LI: Liechtenstein>
<LK: Sri Lanka>
<LR: Liberia>
<LS: Lesotho>
<LT: Lithuania>
<LU: Luxembourg>
<LV: Latvia>
<LY: Libya>
<MA: Morocco>
<MC: Monaco>
<MD: Moldova>
<ME: Montenegro>
<MF: St. Martin>
<MG: Madagascar>
<MH: Marshall Islands>
<MK: North Macedonia>
<ML: Mali>
<MM: Myanmar (Burma)>
<MN: Mongolia>
<MO: Macao>
<MP: Northern Mariana Islands>
<MQ: Martinique>
<MR: Mauritania>
<MS: Montserrat>
<MT: Malta>
<MU: Mauritius>
<MV: Maldives>
<MW: Malawi>
<MX: Mexico>
<MY: Malaysia>
<MZ: Mozambique>
<NA: Namibia>
<NC: New Caledonia>
<NE: Niger>
<NF: Norfolk Island>
<NG: Nigeria>
<NI: Nicaragua>
<NL: Netherlands>
<NO: Norway>
<NP: Nepal>
<NR: Nauru>
<NU: Niue>
<NZ: New Zealand>
<OM: Oman>
<PA: Panama>
<PE: Peru>
<PF: French Polynesia>
<PG: Papua New Guinea>
<PH: Philippines>
<PK: Pakistan>
<PL: Poland>
<PM: St. Pierre & Miquelon>
<PN: Pitcairn Islands>
<PR: Puerto Rico>
<PS: Palestinian Territories>
<PT: Portugal>
<PW: Palau>
<PY: Paraguay>
<QA: Qatar>
<QO: Outlying Oceania>
<RE: Réunion>
<RO: Romania>
<RS: Serbia>
<RU: Russia>
<RW: Rwanda>
<SA: Saudi Arabia>
<SB: Solomon Islands>
<SC: Seychelles>
<SD: Sudan>
<SE: Sweden>
<SG: Singapore>
<SH: St. Helena>
<SI: Slovenia>
<SJ: Svalbard & Jan Mayen>
<SK: Slovakia>
<SL: Sierra Leone>
<SM: San Marino>
<SN: Senegal>
<SO: Somalia>
<SR: Suriname>
<SS: South Sudan>
<ST: São Tomé & Príncipe>
<SV: El Salvador>
<SX: Sint Maarten>
<SY: Syria>
<SZ: Eswatini>
<TA: Tristan da Cunha>
<TC: Turks & Caicos Islands>
<TD: Chad>
<TF: French Southern Territories>
<TG: Togo>
<TH: Thailand>
<TJ: Tajikistan>
<TK: Tokelau>
<TL: Timor-Leste>
<TM: Turkmenistan>
<TN: Tunisia>
<TO: Tonga>
<TR: Türkiye>
<TT: Trinidad & Tobago>
<TV: Tuvalu>
<TW: Taiwan>
<TZ: Tanzania>
<UA: Ukraine>
<UG: Uganda>
<UM: U.S. Outlying Islands>
<US: United States>
<UY: Uruguay>
<UZ: Uzbekistan>
<VA: Vatican City>
<VC: St. Vincent & Grenadines>
<VE: Venezuela>
<VG: British Virgin Islands>
<VI: U.S. Virgin Islands>
<VN: Vietnam>
<VU: Vanuatu>
<WF: Wallis & Futuna>
<WS: Samoa>
<XK: Kosovo>
<YE: Yemen>
<YT: Mayotte>
<ZA: South Africa>
<ZM: Zambia>
<ZW: Zimbabwe>
@rijieli
Copy link
Author

rijieli commented Dec 6, 2024

You can also print this list by hand.

private static func allCountriesDescriptions() -> [String] {
    func recursiveRegionDescriptions(_ region: Locale.Region) -> [String] {
        let regionName = regionOrCountryName(region.identifier)
        let description = "<\(region): \(regionName)>"
        let subRegionsDescriptions = region.subRegions.flatMap {
            recursiveRegionDescriptions($0)
        }
        return [description] + subRegionsDescriptions
    }

    return Array(Set(Locale.Region.isoRegions.flatMap { recursiveRegionDescriptions($0) }))
        .sorted()
}

private static func regionOrCountryName(_ countryCode: String?) -> String {
    guard let countryCode else { return "Error" }
    let country = (Locale.enUS as NSLocale)
        .displayName(
            forKey: NSLocale.Key.countryCode,
            value: countryCode
        )
    return country ?? "Error"
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment