昨天 Xcode 更新至 v6.1。
现在,[NSLocale PreferredLanguages] 在 iPhone 中返回一个空数组,但仅适用于 IOS 8 - 在 iPhone 5 和 6 模拟器中都是如此。 iOS 7 模拟器仍然可以正常工作。
物理 iPhone 6 设备似乎不受影响 - 只是模拟器。
通常的尝试 - 清理项目、重新启动 Xcode、重新启动 Mac - 没有任何效果。那么,最好的策略是什么 - 等待 Xcode 6.1.1,还是向 Apple 列表发送投诉(哪一个)?
您可以将类别与
currentLocale
方法混合一起使用,如此处中所述。该类别允许一次性覆盖项目中所有目标的通用语言和区域设置。
您还可以以单独的方式为每个目标使用方案设置。 如果您的应用程序中有很多本地化内容,
您可以在每个目标的方案设置中更改
Application language
和 Application region
。您甚至可以为每个本地化设置单独的目标,以加快语言测试速度。
Product -> Scheme -> Edit scheme...
我已将其标记为骗局,以供考虑。 全局首选项在 iOS 8.1 模拟器中不起作用。 本地化就是这样一种全球偏好。 参见:
参见 iOS8.1 模拟器始终使用美国键盘布局,尽管德国硬件键盘
至于“策略”...您可以只注意到这是发行说明中记录的已知问题并等待修复,或者您可以在 http://bugreport.apple.com
提交雷达首先,它们是模拟器而不是仿真器。其次,在 Xcode 6.1 (6A1052c) 和任何 iOS 8.1 模拟器下,我没有看到
[NSLocale preferredLanguages]
返回空数组,但无论在系统设置中选择哪种语言,我总是看到 "en"
返回。正如您所指出的,我确实看到任何 iOS 7 模拟器的正确行为。
如果尚未提交错误投诉,我会提交错误投诉:更多信息请访问在 iOS 8.1 模拟器上更改语言不起作用。
设置产品 - >方案 - >首选项...没有帮助我,所以我做了一个简单的解决方法:
NSString *language = [[NSLocale preferredLanguages] count] > 0 ?
[[NSLocale preferredLanguages] objectAtIndex:0] :
@"en";