来自数字格式化程序的本地化货币符号



如何设置数字格式化程序以返回货币符号而不是 iso 符号,而是在 iOS 区域设置窗格中可见的本地符号。就像波兰货币一样,我需要有"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"的回报

如果您将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ł"

我找到了这个解决方案

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)
}

原答案:https://stackoverflow.com/a/49146857/1285959

最新更新