2017-03-24 29 views
3

---- 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)" 
} 
+2

我不知道拉丁美洲西班牙语,但http://www.localeplanet.com/icu/es-419/index.html名单“¤”为货币符号什么。 –

+0

什么是419? – rmaddy

+0

'es-419'是西班牙语 - 拉丁美洲的代码。 –

回答

2

你必须做黑客,或者你必须是特定于每个国家。

由于es_419是所有拉丁美洲国家的通用规范,因此无法“猜测”您想要显示$

不同国家的es_419区域设置“父母”有不同的货币字符标准。例如,玻利维亚的货币符号是Bs

ICU Locale “Spanish (Bolivia)” (es_BO)

+0

无赖。我猜测一样多,但它仍然感觉错误。 –