From 5bbe893f1bf1328227c41720eed502a7bb20967a Mon Sep 17 00:00:00 2001 From: Sergey Galezdinov Date: Sun, 8 Nov 2020 22:24:30 +0300 Subject: [PATCH] patch to find usa for usd instead of ecuador resolves #2 --- iso4217/Classes/CurrencyCode+Extensions.swift | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/iso4217/Classes/CurrencyCode+Extensions.swift b/iso4217/Classes/CurrencyCode+Extensions.swift index eb188a7..25999b0 100644 --- a/iso4217/Classes/CurrencyCode+Extensions.swift +++ b/iso4217/Classes/CurrencyCode+Extensions.swift @@ -24,11 +24,24 @@ private extension CurrencyCode { } var locale: Locale { + // try to find the mosta appropriate locale for currency, this solves the issue when USD may be resolved to Equador. + // Here we're trying to search through user's preferred locales first. In 99% of cases this will locate more appropriate locale for user. + let preferredLocales: [Locale] = Locale.preferredLanguages.compactMap { + let locale = Locale(identifier: $0.replacingOccurrences(of: "-", with: "_")) + guard let code = locale.currencyCode, code == self.rawValue else { return nil } + return locale + } + + if let locale = preferredLocales.first(where: { $0.currencySymbol != $0.currencyCode }) { + return locale + } + let appropriateLocales: [Locale] = Locale.availableIdentifiers.compactMap { let locale = Locale(identifier: $0) guard let code = locale.currencyCode, code == self.rawValue else { return nil } return locale } + return appropriateLocales.first(where: { $0.currencySymbol != $0.currencyCode }) ?? appropriateLocales.first ?? self.canonicalLocale }