我试图在iOS应用程序中格式化货币值,并使用设备上当前的地区设置来使用适当的货币格式。
在模拟器中,一切似乎都运行得很好:当使用currencyFormatter.locale = Locale.current
时,它采用正确的区域设置,并以正确的货币格式打印数字。
然而,在我的iPhone上,它是用法语配置的,具有法国的区域设置,我希望使用另一种格式(例如:1 234,56欧元)。但是它不起作用,而且似乎使用了英语格式样式(例如:欧元1234,56)。
事实上,如果我在设备上从我的应用程序中打印当前的区域设置,它就不会像我所期望的那样返回fr_FR
:
NSLog(Locale.current.identifier)
>>> en_FR
该地区很好,但语言却不是,尽管该设备上的iOS显然是法语。
有人知道这件事吗?
谢谢!
发布于 2018-01-07 15:33:44
基于@Romain的回答,first!
的强制展开可以通过使用Locale.current.identifier
作为后盾来避免。
func getPreferredLocale() -> Locale {
guard let preferredIdentifier = Locale.preferredLanguages.first else {
return Locale.current
}
return Locale(identifier: preferredIdentifier)
}
发布于 2019-05-16 22:45:56
@Romain这里的问题是,您没有本地化您的应用程序的法语,但只为英语。
转到带有应用程序名称的左上角蓝色文件,选择Project > Info,在本地化区域,您将看到"English - Development Language“。按+并选择法语(fr)。
就这样。现在您可以使用Locale.current,如果设备(或模拟器)的第一语言是法语,则应用程序将显示法语货币格式。
发布于 2018-08-18 11:18:28
@florieger以分机的形式回答:
import Foundation
extension Locale {
static func preferredLocale() -> Locale {
guard let preferredIdentifier = Locale.preferredLanguages.first else {
return Locale.current
}
return Locale(identifier: preferredIdentifier)
}
}
然后像这样使用它:
dateFormatter.locale = Locale.preferredLocale()
datePicker.locale = Locale.preferredLocale()
https://stackoverflow.com/questions/48136456
复制相似问题