es-419 的货币代码是圣甲虫 (¤)



>---- 更新 三月 28, 2017 ----

当您通过 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)"
}

你必须做黑客,或者你必须针对每个国家/地区。

由于es_419是所有拉丁美洲国家/地区的通用规范,因此无法"猜测"您希望显示$

es_419区域设置"父"下的不同国家/地区具有不同的货币字符标准。例如,玻利维亚的货币符号是Bs

ICU 区域设置"西班牙语(玻利维亚)"(es_BO)

最新更新