iOS:有没有办法伪造用户的语言环境?

Mik*_*ike 5 localization nsbundle ios

我有兴趣允许我的用户选择我的应用程序显示给他们的语言/语言环境.我已经想出如何加载正确的包,选择正确的字符串文件等.但是,我似乎还有一些系统项目无法控制.例如,切换控件.

有没有办法告诉系统这个应用程序现在应该使用特定语言,而不是用户当前的系统设置?

tc.*_*tc. 5

最简单的方法是通过NSUserDefaults:语言环境由AppleLocale(语言环境ID作为字符串)确定,语言由第一个匹配AppleLanguages(语言ID数组)确定; 您的应用只能为您的应用覆盖这些默认值.要检查它是否被您的应用覆盖,您可以使用类似的功能[defaults persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]] objectForKey:@"AppleLocale"].要删除覆盖,请使用-removeObjectForKey:.

无论您采用哪种方式,在更改语言时您可能不得不重新启动应用程序 ; OS X和iOS应用程序根本不是为了在运行时更改语言而设计的(在OS X上,只有新推出的应用程序才能看到语言变化;在iOS上,系统会杀死所有应用程序以更改语言).

我添加了此功能,使开关语言更易于开发/测试; 我不知道这是否会使App Store审核流程失败.