---- UPDATE 2017年3月28日----货币代码是在Xcode ES-419
当您设置为通过“编辑计划”应用程序的语言和区域圣甲虫(¤) ,您将获得组合的区域设置标识es-419_MX
。但是,如果通过进入设置来更改设备/模拟器的实际语言和区域,则会获得“正确的”语言环境标识es_MX
,同时保留语言代码es-419
,这可以有效解决几乎所有用例的问题。
// After setting language and region in Edit Scheme from Xcode
print(Bundle.main.preferredLocalizations) // ["es-419", "es"]
print(Locale.current) // es-419_MX (current)
// After setting the language and region from Settings
print(Bundle.main.preferredLocalizations) // ["es-419", "es"]
print(Locale.current) // es_MX (current)
----/UPDATE ----
我本地化我的应用程序到拉丁美洲西班牙语(es-419
)。当我尝试使用NumberFormatter
显示本地货币时,iOS会返回圣甲虫¤
而不是美元符号$
。
例如,如果用户的地区是墨西哥,他们将有地区代码es-419_MX
。而不是返回$
的,下面的代码返回¤
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "es-419_MX")
formatter.numberStyle = .currency
formatter.currencySymbol // ¤
如果我删除了“419”,我得到了正确的货币符号:
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "es_MX")
formatter.numberStyle = .currency
formatter.currencySymbol // $
是否有可能时Locale.current
才能得到正确的货币符号返回es-419_MX
?或者我将不得不求助于从本地代码中删除419
实例的黑客行为?
实际代码:
func localizedCurrency(value: Double) -> String {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = Locale.current
return formatter.string(from: NSNumber(value: value)) ?? "$\(value)"
}
我不知道拉丁美洲西班牙语,但http://www.localeplanet.com/icu/es-419/index.html名单“¤”为货币符号什么。 –
什么是419? – rmaddy
'es-419'是西班牙语 - 拉丁美洲的代码。 –