NSLocale在iOS 11中返回错误的值

从iOS 11.0开始,以下代码返回“de_US”而不是“en_US”

// => Returns "de_US" NSString *regionCode = [[NSLocale currentLocale] objectForKey:NSLocaleIdentifier]; NSLog(@"Region code: %@", regionCode); 

在iOS 11下面,它返回“en_US”。

我的设备有语言和地区英语/美国。 首选语言(尽管我不在我的代码中使用它们)是有序的:

  1. 英语
  2. 德语
  3. 法国

这是iOS 11的已知问题吗? API有变化吗?

找到了!

这是从iOS 11开始的变化行为。

在iOS 11下,[NSLocale currentLocale]仅返回应用程序本地化支持的语言。 如果您的应用仅支持英语(作为基本本地化),则无论用户在设备上选择何种语言,currentLocale将始终返回英语。

在iOS 10及更早版本中,currentLocale将直接表示用户选择的语言和区域,无论您的应用支持哪些本地化。

更多信息: