NSLocale在iOS 11中返回错误的值

时间:2017-12-06 14:39:34

标签: ios localization ios11 nslocale

从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有变化吗?

1 个答案:

答案 0 :(得分:9)

发现它!

这是从iOS 11开始的更改行为。

  

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

     

在iOS 10及更早版本中,currentLocale将直接代表   用户选择的语言和区域,无论本地化是什么   你的应用支持。

此处提供更多信息: