NSLocale preferredLanguages objectAtIndex:0总是返回" en"

时间:2014-10-26 10:42:11

标签: iphone nsuserdefaults region nslocale ios8.1

Simulator的语言已经改为日语,为什么[[NSLocale preferredLanguages] objectAtIndex:0] 总是返回"en"

首选语言和地区都与" en"无关,"en"来自哪里?

Here is screenshot

试图获得[[NSLocale preferredLanguages] objectAtIndex: 2 ],然后崩溃显示*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (2) beyond bounds (1)

这是否意味着模拟器中没有设置任何语言?太奇怪了!

在使用iOS8.1 / 7.1升级到Xcode 6.1之前,这种情况从未发生过。

与此同时,在我的iPhone 5上做了同样的事情,控制台输出正确的东西。

为什么这么奇怪?有没有人有这样的问题?

更新:1

  • 删除Xcode和模拟器,然后从Mac Store下载重新安装。
  • 创建一个新的简单项目,更改simlulator的语言
  • 总是得到" en"。

哦!怎么了......


更新:2

  • 今天,通过重新格式化HD重新安装了全新的Yosemite
  • 下载Xcode 6.1
  • 启动一个新的简单默认项目
  • 输入这些代码
  • 更改/添加模拟器,日语,荷兰语,英语,
  • 的语言
  • 运行
  • 哦,天啊!再次只有"en",找不到日语和英语!

为什么只能找到一个"en"?日语和英语在哪里?

模拟器发生了什么?

我错过了什么?

2 个答案:

答案 0 :(得分:28)

这是一个错误。这让我发疯了。 Apple已经知道了。

看到这个答案:

iOS8.1 Simulator always uses US keyboard layout despite german hardware keyboard

和此:

iOS 8.1 Simulator Localization broken (NSLocalizedString)

(在答案中有一个临时修复更改架构)

最佳, 黎姿

答案 1 :(得分:0)

我的iOS模拟器突然开始报告"en"而不是"en-US",所以看起来这个问题仍然有效。

转载于:

  • Xcode 8.2.1,iOS 10
  • Xcode 9.4.1,iOS 11

我进入语言设置,选择了英语和美国。我选择了加拿大和法国,得到"fr-CA"。然后我将其切换回来并再次开始获取"en-US"。我从那时起就无法重现"en"问题。

所以看来我们无法传递[NSLocale preferredLanguages]的值,假设它们是语言区域对。