【问题标题】:How to set iOS NSNumberFormatter locale via currency code?如何通过货币代码设置 iOS NSNumberFormatter 语言环境?
【发布时间】:2014-12-22 22:53:15
【问题描述】:

有没有办法通过货币代码而不是 iOS 中的区域设置标识符为 NSNumberFormatter 设置 NSLocale

例如,在语言环境设置的任何位置都使用“USD”而不是“en_US”?

我看到有一个 NSLocaleCurrencyCode 对象,但我不确定我可以使用什么方法来设置 NSNumberFormatter's locale

我目前正在使用 Swift,如果这样可以使过程更容易的话。

编辑:为了进一步解释我在做什么,我列出了每个国家/地区的货币代码(美元、英镑、日元、人民币等)。用户通过这些代码选择他使用的任何一种货币,然后我希望 NSNumberFormatter 自动将其语言环境设置为该货币的语言环境以自动格式化。

【问题讨论】:

  • 请记住,USD 用于多个语言环境。许多地区都使用欧元。更好地解释你拥有什么以及你想要完成什么。
  • 所以我列出了每个国家的货币代码(美元、英镑、日元、人民币等)。用户通过这些代码选择他使用的任何一种货币,然后我希望 NSNumberFormatter 自动将其语言环境设置为该货币的语言环境以自动格式化。
  • 这还不清楚。您有国家列表及其相关的货币代码,还是只有货币代码列表?就像我说的,像 EUR 这样的代码被用于许多不同的国家。没有特定的语言环境与给定的货币代码相关联。货币格式应基于用户的区域设置,而不是任何特定的货币代码。
  • 这是一个货币代码列表。用户没有选择国家。它适用于用户在国外旅行并想要输入外币价格的情况。我希望他们的输入在选择时以该货币格式化。

标签: ios objective-c swift


【解决方案1】:

您无法根据货币代码确定特定的语言环境。

例如,具有货币代码USD 的语言环境数量为 27,而带有这些 NSLocaleNSNumberFormatter 发出具有 7 个变体的格式化字符串:

"$123,456.78":    [en_PR, es_US, en_MH, chr_US, en_AS, en_MP, es_SV, en_VG, en_VI, es_PR, haw_US, en_IO, en_UM, en_US, en_DG, en_GU]
"US$123,456.78":  [en_PW, sn_ZW, en_ZW, en_TC, nd_ZW, en_FM]
"$123.456,78":    [es_EC]
"123 456,78 US$": [pt_TL]
"$ 123456.78":    [en_US_POSIX]
"$ 123.456,78":   [nl_BQ]
"$ 123,456.78":   [lkt_US]

如果你想做你想做的事,你应该自己维护一个查找表。

let currency2locale = [
    "USD": NSLocale(localeIdentifier: "en_US"),
    "GBP": NSLocale(localeIdentifier: "en_GB"),
    "JPY": NSLocale(localeIdentifier: "ja_JP"),
    ...
]

【讨论】:

  • 谢谢,我想我必须做这样的事情。我可能会设置一个 if 语句,这样如果用户选择 27 个中的任何一个,它就是“en_US”。但是,我仍然想做货币转换,所以我仍然需要为每种货币编写一个 if 语句。无论如何,再次感谢!
  • 嘿 rintaro,只是想知道,你从哪里得到的信息说与货币代码 USD 相关的语言环境数量是 27?
  • 刚刚数过:)。 (NSLocale.availableLocaleIdentifiers() as [String]).filter({NSLocale(localeIdentifier: $0).objectForKey(NSLocaleCurrencyCode) as? String == "USD"}).count
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多