2017-03-24 49 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

無賴。我猜測一樣多,但它仍然感覺錯誤。 –