Локализованный символ валюты из NumberFormatter - PullRequest
0 голосов
/ 28 мая 2020

как настроить NumberFormatter для возврата символа валюты не iso, а локального, который отображается на панели настроек локали iOS. Как и для валюты Poli sh, мне нужен символ «zł», а не «PLN».

Я не могу найти способ получить его из системы, так как это невозможно жестко запрограммировать. В локализованной цене IAP также используется «zł», а не «PLN»

Я пробовал вот так:

let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencySymbol = Locale.current.currencySymbol
formatter.maximumFractionDigits = 2

let price = formatter.string(from: (offeringPrice / 12) as NSNumber) ?? ""

но все, что я пытаюсь использовать в качестве символа валюты, я всегда получаю взамен «PLN»

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Если вы установите formatter.locale на pl_PL, это работает:

let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.maximumFractionDigits = 2
formatter.currencyCode = "PLN"

let polandLocale = Locale(identifier: "pl_PL")
let usLocale = Locale(identifier: "en_US")

let offeringPrice = 50.0
let price = (offeringPrice / 12) as NSNumber

formatter.locale = usLocale
formatter.string(from: price) // "PLN 4.17"

formatter.locale = polandLocale
formatter.string(from: price) // "4,17 zł"
0 голосов
/ 28 мая 2020

Я нашел это решение

    func getCurrencySymbol(from currencyCode: String) -> String? {
        let locale = NSLocale(localeIdentifier: currencyCode)
        if locale.displayName(forKey: .currencySymbol, value: currencyCode) == currencyCode {
            let newlocale = NSLocale(localeIdentifier: currencyCode.dropLast() + "_en")
            return newlocale.displayName(forKey: .currencySymbol, value: currencyCode)
        }
        return locale.displayName(forKey: .currencySymbol, value: currencyCode)
    }

исходный ответ здесь: { ссылка }

...