Skip to content

Instantly share code, notes, and snippets.

@Lavmint
Last active February 3, 2024 06:24
Show Gist options
  • Save Lavmint/3af912be060cfe596c79dbca119e055f to your computer and use it in GitHub Desktop.
Save Lavmint/3af912be060cfe596c79dbca119e055f to your computer and use it in GitHub Desktop.
Country emoji resolver for ISO-639-1 languages (AI generated)
import Foundation
protocol CountryEmojiResolver {
func emoji(for country: String) -> String
}
class StandartCoutryEmojiResolver: CountryEmojiResolver {
func emoji(for country: String) -> String {
let languageToFlag: [String: String] = [
"aa": flagEmoji(for: "ET"),
"ab": flagEmoji(for: "GE"),
"ae": flagEmoji(for: "IR"),
"af": flagEmoji(for: "ZA"),
"ak": flagEmoji(for: "GH"),
"am": flagEmoji(for: "ET"),
"an": flagEmoji(for: "ES"),
"ar": flagEmoji(for: "SA"),
"as": flagEmoji(for: "IN"),
"av": flagEmoji(for: "RU"),
"ay": flagEmoji(for: "BO"),
"az": flagEmoji(for: "AZ"),
"ba": flagEmoji(for: "RU"),
"be": flagEmoji(for: "BY"),
"bg": flagEmoji(for: "BG"),
"bi": flagEmoji(for: "VU"),
"bm": flagEmoji(for: "ML"),
"bn": flagEmoji(for: "BD"),
"br": flagEmoji(for: "FR"),
"bs": flagEmoji(for: "BA"),
"ca": flagEmoji(for: "AD"),
"ch": flagEmoji(for: "GU"),
"co": flagEmoji(for: "FR"),
"cr": flagEmoji(for: "CA"),
"cs": flagEmoji(for: "CZ"),
"cv": flagEmoji(for: "RU"),
"cy": flagEmoji(for: "GB"),
"da": flagEmoji(for: "DK"),
"de": flagEmoji(for: "DE"),
"dv": flagEmoji(for: "MV"),
"dz": flagEmoji(for: "BT"),
"ee": flagEmoji(for: "GH"),
"el": flagEmoji(for: "GR"),
"en": flagEmoji(for: "GB"),
"es": flagEmoji(for: "ES"),
"et": flagEmoji(for: "EE"),
"eu": flagEmoji(for: "ES"),
"fa": flagEmoji(for: "IR"),
"ff": flagEmoji(for: "SN"),
"fi": flagEmoji(for: "FI"),
"fj": flagEmoji(for: "FJ"),
"fo": flagEmoji(for: "FO"),
"fr": flagEmoji(for: "FR"),
"fy": flagEmoji(for: "NL"),
"ga": flagEmoji(for: "IE"),
"gd": flagEmoji(for: "GB"),
"gl": flagEmoji(for: "ES"),
"gn": flagEmoji(for: "PY"),
"gu": flagEmoji(for: "IN"),
"gv": flagEmoji(for: "IM"),
"ha": flagEmoji(for: "NG"),
"he": flagEmoji(for: "IL"),
"hi": flagEmoji(for: "IN"),
"ho": flagEmoji(for: "PG"),
"hr": flagEmoji(for: "HR"),
"ht": flagEmoji(for: "HT"),
"hu": flagEmoji(for: "HU"),
"hy": flagEmoji(for: "AM"),
"hz": flagEmoji(for: "NA"),
"id": flagEmoji(for: "ID"),
"ii": flagEmoji(for: "CN"),
"ik": flagEmoji(for: "US"),
"is": flagEmoji(for: "IS"),
"it": flagEmoji(for: "IT"),
"iu": flagEmoji(for: "CA"),
"ja": flagEmoji(for: "JP"),
"ka": flagEmoji(for: "GE"),
"kg": flagEmoji(for: "CD"),
"ki": flagEmoji(for: "KE"),
"kj": flagEmoji(for: "AO"),
"kk": flagEmoji(for: "KZ"),
"kl": flagEmoji(for: "GL"),
"km": flagEmoji(for: "KH"),
"kn": flagEmoji(for: "IN"),
"ko": flagEmoji(for: "KR"),
"ks": flagEmoji(for: "IN"),
"ku": flagEmoji(for: "IQ"),
"kv": flagEmoji(for: "RU"),
"kw": flagEmoji(for: "GB"),
"ky": flagEmoji(for: "KG"),
"la": flagEmoji(for: "VA"),
"lb": flagEmoji(for: "LU"),
"lg": flagEmoji(for: "UG"),
"li": flagEmoji(for: "NL"),
"ln": flagEmoji(for: "CD"),
"lo": flagEmoji(for: "LA"),
"lt": flagEmoji(for: "LT"),
"lu": flagEmoji(for: "CD"),
"lv": flagEmoji(for: "LV"),
"mg": flagEmoji(for: "MG"),
"mh": flagEmoji(for: "MH"),
"mi": flagEmoji(for: "NZ"),
"mk": flagEmoji(for: "MK"),
"ml": flagEmoji(for: "IN"),
"mn": flagEmoji(for: "MN"),
"mo": flagEmoji(for: "MD"),
"mr": flagEmoji(for: "IN"),
"ms": flagEmoji(for: "MY"),
"mt": flagEmoji(for: "MT"),
"my": flagEmoji(for: "MM"),
"na": flagEmoji(for: "NR"),
"nd": flagEmoji(for: "ZW"),
"ne": flagEmoji(for: "NP"),
"ng": flagEmoji(for: "NA"),
"nl": flagEmoji(for: "NL"),
"no": flagEmoji(for: "NO"),
"nr": flagEmoji(for: "ZA"),
"nv": flagEmoji(for: "US"),
"oc": flagEmoji(for: "FR"),
"oj": flagEmoji(for: "CA"),
"om": flagEmoji(for: "ET"),
"or": flagEmoji(for: "IN"),
"os": flagEmoji(for: "GE"),
"pa": flagEmoji(for: "IN"),
"pi": flagEmoji(for: "IN"),
"pl": flagEmoji(for: "PL"),
"ps": flagEmoji(for: "AF"),
"pt": flagEmoji(for: "PT"),
"qu": flagEmoji(for: "PE"),
"rm": flagEmoji(for: "CH"),
"rn": flagEmoji(for: "BI"),
"ro": flagEmoji(for: "RO"),
"ru": flagEmoji(for: "RU"),
"rw": flagEmoji(for: "RW"),
"sa": flagEmoji(for: "IN"),
"sc": flagEmoji(for: "IT"),
"sd": flagEmoji(for: "PK"),
"sg": flagEmoji(for: "CF"),
"si": flagEmoji(for: "LK"),
"sk": flagEmoji(for: "SK"),
"sl": flagEmoji(for: "SI"),
"sm": flagEmoji(for: "WS"),
"sn": flagEmoji(for: "ZW"),
"so": flagEmoji(for: "SO"),
"sq": flagEmoji(for: "AL"),
"sr": flagEmoji(for: "RS"),
"ss": flagEmoji(for: "SZ"),
"st": flagEmoji(for: "LS"),
"su": flagEmoji(for: "ID"),
"sv": flagEmoji(for: "SE"),
"sw": flagEmoji(for: "TZ"),
"ta": flagEmoji(for: "IN"),
"te": flagEmoji(for: "IN"),
"tg": flagEmoji(for: "TJ"),
"th": flagEmoji(for: "TH"),
"ti": flagEmoji(for: "ET"),
"tk": flagEmoji(for: "TM"),
"tl": flagEmoji(for: "PH"),
"tn": flagEmoji(for: "BW"),
"to": flagEmoji(for: "TO"),
"tr": flagEmoji(for: "TR"),
"ts": flagEmoji(for: "ZA"),
"tt": flagEmoji(for: "RU"),
"tw": flagEmoji(for: "GH"),
"ty": flagEmoji(for: "PF"),
"ug": flagEmoji(for: "CN"),
"uk": flagEmoji(for: "UA"),
"ur": flagEmoji(for: "PK"),
"uz": flagEmoji(for: "UZ"),
"ve": flagEmoji(for: "ZA"),
"vi": flagEmoji(for: "VN"),
"wa": flagEmoji(for: "BE"),
"wo": flagEmoji(for: "SN"),
"xh": flagEmoji(for: "ZA"),
"yi": flagEmoji(for: "IL"),
"yo": flagEmoji(for: "NG"),
"za": flagEmoji(for: "CN"),
"zu": flagEmoji(for: "ZA"),
"bo": flagEmoji(for: "CN"),
"ig": flagEmoji(for: "NG"),
"ce": flagEmoji(for: "RU"),
"cu": flagEmoji(for: "RU"),
"jv": flagEmoji(for: "ID"),
"se": flagEmoji(for: "NO"),
"nb": flagEmoji(for: "NO"),
"nn": flagEmoji(for: "NO"),
"ny": flagEmoji(for: "MW"),
"sh": flagEmoji(for: "RS"),
"eo": "๐ŸŒ",
"io": "๐ŸŒ",
"ia": "๐ŸŒ",
"ie": "๐ŸŒ",
"vo": "๐ŸŒ",
]
return languageToFlag[country.lowercased()] ?? ""
}
func flagEmoji(for countryCode: String) -> String {
let base: UInt32 = 127397
var s = ""
for v in countryCode.uppercased().unicodeScalars {
guard let scalar = UnicodeScalar(base + v.value) else { continue }
s.unicodeScalars.append(scalar)
}
return s
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment