Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get country name from currency code?

How to get country name from currency code? Is this possible or not?

like image 952
Raj Joshi Avatar asked Sep 01 '25 03:09

Raj Joshi


1 Answers

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"] 
like image 178
user28434'mstep Avatar answered Sep 02 '25 16:09

user28434'mstep