Xcode 5/iOS 7 - 本地化在模拟器中不起作用
Posted
技术标签:
【中文标题】Xcode 5/iOS 7 - 本地化在模拟器中不起作用【英文标题】:Xcode 5/iOS 7 - localization not working in simulator 【发布时间】:2013-10-04 04:59:13 【问题描述】:我正在关注 Ray Wenderlich 的本地化教程之一,但我似乎无法让它发挥作用。
我已经将我的项目设置为英语和法语的本地化,并且每个项目都有一个 locaziable.strings 文件:
法语文件有正确的(就谷歌翻译而言)我的字符串的法语版本:
我通过从 localizable.strings 文件中调用正确的键来设置字符串:
NSString* strTitle = [NSString stringWithFormat:NSLocalizedString(@"Title", Nil)];
我将模拟器设置为法语(顺便说一句:每当我更改语言时,模拟器都会崩溃)。
但它不是从正确的 localizable.strings 文件中提取的。它仍然以英文显示:
我做错了吗?
【问题讨论】:
【参考方案1】:如果您使用的是 xcode 6.1.1 和 ios sdk 8.1,请尝试此解决方法。
本地化似乎不适用于 xCode 6.1 和 8.1 模拟器。 解决方法: 转到“编辑方案”>>“运行”(侧栏)>>“选项”选项卡>>“应用程序语言” 选择您希望在模拟器上运行应用程序的语言。 我从Workaround natanavra 得到了这个解决方法 谢谢他。
但是我在开发人员forum 上读到,它在 Xcode 的 6.2 beta 版本中工作。希望可以。
【讨论】:
完美,这是为我做的! 此外,您可以复制当前方案并拥有多个方案,每个方案对应您要测试的每种语言。【参考方案2】:也许您在文件Localizable.strings
已经存在但尚未本地化的某个时间运行了该应用程序。如果是这种情况,这个未本地化的文件仍然驻留在模拟器中应用程序包的资源文件夹中(当您在模拟器或设备中构建运行应用程序的新版本时,不会删除未使用的文件)。这可能会导致问题。
尝试从模拟器中完全删除应用程序并再次构建运行。
【讨论】:
太棒了!我现在要开始我的周末了。谢谢! 删除应用时,在xCode的“产品”菜单中使用“清理”。这就是最终对我有用的方法。 卸载和清理对我有用 - iOS 8.4, Xcode 6.4 (6E35b)【参考方案3】:我在设备上遇到过类似的问题(在我的情况下是 IB 本地化)。所以一般的答案是
设备 - Shift+CMD+K 卸载应用并清理项目
模拟器 - 转到 iOS 模拟器 > 重置内容和设置并按 Shift+CMD+K 清理项目
这些问题真的很烦人。除了更新本地化字符串的能力差之外,本地化也是 iOS 开发的最大缺点之一。
【讨论】:
嘿,对猪有什么好处:( 重置设备对我没有任何帮助,我觉得这很奇怪。但是清理项目成功了!【参考方案4】:另一个可能导致本地化无法正常工作的问题是字符串文件的编码。 Localizable.strings 的编码必须是 UTF-16。 xcode 中文本文件的默认编码是 UTF-8,这导致我花了一整天的时间来检查为什么本地化不起作用。
【讨论】:
我不知道为什么这被否决了(我只是投了赞成票)。自 iOS 2.5 以来,我一直使用相同的本地化.strings 文件,但在 iOS 7 中它停止工作。我刚刚将 UTF-8 更改为 UTF-16,它现在可以工作了 - 谢谢! 我用 TextWrangled 打开了文件,本地化停止工作。它改变了编码... 您可以在textwrangler中随意更改编码,就在底部边框,有一个下拉列表控件,选择UTF-16并保存文件。【参考方案5】:在 Xcode 6.0 及更高版本中,通过更改模拟器中的语言不起作用,本地化不起作用。
您必须在运行应用程序之前编辑方案。
转到编辑方案 -> 运行 -> 选项,在此处更改语言。
现在,运行您的应用程序。它会工作的。
欲了解更多详情,请查看此答案:Changing language on iOS 8.1 simulator does not work
【讨论】:
【参考方案6】:我的问题是本地化文件中的字符编码不正确。
【讨论】:
以上是关于Xcode 5/iOS 7 - 本地化在模拟器中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 5 iOS 7 Simulator 没有加载 Storyboard 让我抓狂! (没有本地化)