----更新2017年3月28日----
当您通过Xcode中的“编辑方案”设置应用的语言和区域时,您将获得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)
---- /更新----
我正在将我的应用本地化为拉丁美洲西班牙语(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)"
}
答案 0 :(得分:3)
你必须做黑客攻击,否则你必须具体针对每个国家。
由于es_419
是所有拉丁美洲国家的通用规范,因此无法猜测"您希望$
显示。
es_419
区域"父母"下的不同国家/地区有不同的货币特征标准。例如,玻利维亚的货币符号为Bs
。