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

24
模拟器的语言已经改成了日语,但是为什么[[NSLocale preferredLanguages] objectAtIndex:0]总是返回"en"呢?首选语言和地区都与“en”无关,那么“en”从哪里来的呢?尝试获取[[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 下载重新安装。 - 创建一个新的简单项目,更改模拟器的语言。 - 仍然始终得到“en”。 - 哦!怎么回事…
更新:2 - 今天,通过重新格式化硬盘重新安装全新的 Yosemite。 - 下载 Xcode 6.1。 - 启动一个新的简单的默认项目。 - 放置这些代码。 - 更改/添加模拟器的语言,日语、荷兰语、英语。 - 运行。 - 天啊!又只得到了"en",找不到日语和英语!
为什么仍然只能找到一个“en”?日语和英语在哪里? 模拟器发生了什么? 我错过了什么吗?

尝试设置您在OS X上的首选语言(不要在模拟器中的设置中设置?) - nielsbot
首选语言对 OS X 是否影响 iPhone 模拟器的语言?我不这么认为。无论如何,尝试过但是没有起作用。 - S1U
在iPhone6和iPhone6 Plus模拟器上,[[NSLocale preferredLanguages] objectAtIndex:0] 对我来说运行良好。 - Shoaib
1
@Shoaib 你正在使用哪个版本的Xcode? - S1U
1
@Shoaib 6.0.1还是6.1? - S1U
1
版本号为6.0.1,但我认为这个版本对此无关紧要。 - Shoaib
2个回答

29

3
没错。在我把整个一天都花在安装/卸载/重新安装 Xcode 5.1.1 和 6.0.1 上之后,最终发现 NSLocale 无法正常工作是因为 Xcode 6.1 的缘故。 - S1U
是的,不幸的是我们必须等待苹果,或者使用模式修复。 - J.Williams
请关闭问题:)@s1u请注意,以上翻译为简体中文。 - J.Williams
@s1u,您需要点击左侧的勾选按钮来接受最佳答案。这样别人就能立即知道读什么来获得解决方案或最好的解释。此外,该问题将不再出现在未回答的问题中。这会使StackOverflow保持整洁高效。 - J.Williams

1
我的iOS模拟器突然报告了"en"而不是"en-US",因此看来这个问题仍然存在。
在以下环境中重现:
- Xcode 8.2.1,iOS 10 - Xcode 9.4.1,iOS 11
我进入语言设置,选择了英语和美国,然后选择了加拿大和法语,得到了"fr-CA"。然后我切换回来,又开始得到"en-US"了。自那以后,我一直无法重现"en"的问题。
因此,似乎我们不能假设[NSLocale preferredLanguages]的值将是语言-区域对。

1
在 iOS 模拟器中查看“设置”-->“通用”-->“语言与地区”-->“iPhone 语言”,您会发现模拟器默认设置为“英语”,而不是“英语(美国)”。这就是为什么 [NSLocale preferredLanguages] 报告系统语言为“en”的原因。最奇怪的是,真实设备上似乎没有“英语”(不带国家/地区信息),只有在模拟器上才有。 - Enrique

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接