How to get country name from currency code? Is this possible or not?
Alternative option, using Swift 3 Locale
class data:
struct CurrencyToRegionMapper {
static let locales = Locale.availableIdentifiers.map(Locale.init)
static func locales(currencyCode: String) -> Set<Locale> {
let localesWithCode = self.locales.filter { locale in
locale.currencyCode == currencyCode
}
return Set(localesWithCode)
}
static func locales(currencySymbol: String) -> Set<Locale> {
let localesWithSymbol = self.locales.filter { locale in
locale.currencySymbol == currencySymbol
}
return Set(localesWithSymbol)
}
static func regionNames(currencyCode: String, forLocale locale: Locale = Locale.autoupdatingCurrent) -> Set<String> {
let locale = Locale(identifier: locale.identifier) // .current and .autoupdatingCurrent doesn't work without this hack for some reason
let localesForCode = self.locales(currencyCode: currencyCode)
let names: [String] = localesForCode.flatMap { loc in
if let regionCode = loc.regionCode {
return locale.localizedString(forRegionCode: regionCode)
} else {
return locale.localizedString(forIdentifier: loc.identifier)
}
}
return Set(names)
}
static func regionNames(currencySymbol: String, forLocale locale: Locale = Locale.autoupdatingCurrent) -> Set<String> {
let locale = Locale(identifier: locale.identifier) // .current and .autoupdatingCurrent doesn't work without this hack for some reason
let localesForSymbol = self.locales(currencySymbol: currencySymbol)
let names: [String] = localesForSymbol.flatMap { loc in
if let regionCode = loc.regionCode {
return locale.localizedString(forRegionCode: regionCode)
} else {
return locale.localizedString(forIdentifier: loc.identifier)
}
}
return Set(names)
}
}
Usage:
CurrencyToRegionMapper.locales(currencyCode: "EUR") // Returns set of locales, where currency is Euro
CurrencyToRegionMapper.locales(currencySymbol: "$") // Returns set of locales, where currency symbol is $
CurrencyToRegionMapper.regionNames(currencyCode: "GBP", forLocale: Locale(identifier: "en_POSIX")) // Returns set of regions(countries) names which use british pound in POSIX locale: ["United Kingdom", "Guernsey", "Jersey", "Isle of Man"]
CurrencyToRegionMapper.regionNames(currencySymbol: "¥", forLocale: Locale(identifier: "fi_FI")) // Returns set of regions which use currency with symbol ¥ in Finnish locale: ["Kiina", "Japani"]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With