2013-03-13 37 views
5

我有兴趣让我的用户选择我的应用出现在他们的语言/区域设置。我已经想出了如何加载正确的包,选择正确的字符串文件等。但是,我仍然看到一些系统项目无法控制。例如,开关控制。iOS:有什么办法可以伪造用户的语言环境?

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

+1

Whoa-whoo。 'method_setImplementation(class_getInstanceMethod([NSLocale class],@selector(currentLocale)),(IMP)spoofedImpl);'? – 2013-03-13 21:18:50

+2

任何方式来做到这一点,而不会搅拌? – Mike 2013-03-13 21:27:37

+0

您是否尝试过为NSLocale创建一个类别以返回您为类方法选择的语言环境? – 2013-03-13 21:52:32

回答

5

的至少哈克的方式是经由NSUserDefaults:区域设置由AppleLocale(区域ID作为字符串)确定,并且该语言是由第一匹配在AppleLanguages(语言ID的阵列)来确定;您的应用只能为您的应用覆盖这些默认值。要检查它是否被你的应用覆盖,你可以使用类似[defaults persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]] objectForKey:@"AppleLocale"]的东西。要删除覆盖,请使用-removeObjectForKey:

无论您如何操作,在更改语言时可能必须使用relaunch the app; OS X和iOS应用程序根本不是为了在运行时更改语言而设计的(在OS X上,只有新推出的应用程序才会看到语言更改;在iOS上,系统会杀死所有应用程序以更改语言)。

我增加了这个功能,使开关语言更易于开发/测试;我不知道这是否会失败的App Store审查过程。

+0

谢谢@tc。这听起来像这可能是远离的东西,但我很欣赏详细的选项。 – Mike 2013-03-20 15:26:28

相关问题