Locale.current在设备上报告错误的语言
我正在尝试在iOS应用中格式化货币值,并且我正在使用设备上的当前区域设置来使用适当的货币格式。
在模拟器中,一切似乎都运行良好:当使用currencyFormatter.locale = Locale.current
,它采用正确的区域设置并使用正确的货币格式打印数字。
然而,在我的iPhone上,使用法语区域设置法语配置,我希望使用另一种格式(例如: 1 234,56€ )。 但它不起作用,似乎使用英语格式(例如: €1 234,56 )。
事实上,如果我从设备上的应用程序打印当前的Locale,它不会像我期望的那样返回fr_FR
:
NSLog(Locale.current.identifier) >>> en_FR
该地区很好,但语言不是,虽然该设备上的iOS显然是法语。
有人对此有所了解吗?
谢谢!
根据@Romain的回答强行解开first!
可以通过使用Locale.current.identifier
作为回退来避免。
func getPrefferedLocale() -> Locale { guard let prefferredIdentifier = Locale.preferredLanguages.first else { return Locale.current } return Locale(identifier: prefferredIdentifier) }
按照@ MartinR的提示,我现在使用currencyFormatter.locale = Locale(identifier: Locale.preferredLanguages.first!)
,它完全对应于设备的当前语言和区域设置。
我不完全确定这个代码是防弹的(因为first!
,最值得注意的是)所以如果你有其他的建议,请随意。
@ florieger以扩展名的forms回答:
import Foundation extension Locale { static func prefferedLocale() -> Locale { guard let prefferredIdentifier = Locale.preferredLanguages.first else { return Locale.current } return Locale(identifier: prefferredIdentifier) } }
然后像这样使用它:
dateFormatter.locale = Locale.prefferedLocale() datePicker.locale = Locale.prefferedLocale()