---- 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'是西班牙語 - 拉丁美洲的代碼。 –