【问题标题】:NSLocale returning wrong value in iOS 11NSLocale 在 iOS 11 中返回错误值
【发布时间】:2017-12-06 14:39:34
【问题描述】:

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

【问题讨论】:

  • 这是发生在设备上还是模拟器上?此外:该应用程序有英文本地化?
  • 它发生在设备上:iPhone 6 Plus。应用程序只有一个本地化:Xcode 目标中的“Localizable.strings”文件。此文件中的值是德语,但我没有指定它是 Xcode 中的德语文件。所以我想知道这个“de_”是从哪里来的。

标签: ios localization ios11 nslocale


【解决方案1】:

找到了!

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

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

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

更多信息在这里:

【讨论】:

  • 如果这些本地化是相同的,那么我猜你的申请完全是关于焦虑、幼儿园和幸灾乐祸?撇开玩笑不谈,Apple 仍然将 .current/-currentLocale 记录为“当前用户选择的系统区域设置与用户指定的任何自定义设置重叠”的功能,但指出区域设置代表“语言、文化和技术约定” ,而不仅仅是一种语言。那么您是否使用公里、24 小时制、正常的 dd/mm/yyyy 日期显示等?
  • 请注意,如果您的德语和英语 Localizable.strings 文件完全相同,那么您将会有非常不高兴的用户。 App Store 会声称您的应用同时支持德语和英语。但是由于您实际上并没有本地化两个字符串文件(您说它们是相同的),所以德语和英语用户都会看到您实际使用的语言(我不知道您是否有两个文件都是德语或英文)。
  • 你说得对,我没有注意到商店会支持德语和英语。这实际上是错误的,因为两种翻译都是相同的......看到你的stackoverflow链接。所以真的是iOS 11的改动。iOS会检测到我只有德语,所以它总是会返回德语……不知道这里该怎么办。
  • 我目前在我的一个今日小部件中面临同样的问题。我的应用程序已本地化为许多不同的语言,但小部件一直在我的 DE 设备上显示 EN 文本。有什么想法吗?
  • iOS 14 怎么样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-24
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多