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

Posted

技术标签:

【中文标题】iOS:有没有办法伪造用户的语言环境?【英文标题】:iOS: Is there any way to fake the user's locale? 【发布时间】:2013-03-13 21:14:28 【问题描述】:

我有兴趣让我的用户选择我的应用程序显示给他们的语言/区域设置。我已经知道如何加载正确的包,选择正确的字符串文件等。但是,我仍然有一些系统项目似乎无法控制。例如,切换控件。

我有什么方法可以告诉系统这个应用现在应该以特定语言运行,而不是用户当前的系统设置?

【问题讨论】:

哇-哇。 method_setImplementation(class_getInstanceMethod([NSLocale class], @selector(currentLocale)), (IMP)spoofedImpl);? 有什么方法可以做到不打搅? 您是否尝试过为 NSLocale 创建一个类别以返回您为类方法选择的语言环境? @MarcusAdams 这比方法调配更糟糕,因为类别上的覆盖方法具有未定义的行为 @Mike 成为 Apple 从事 UIKit 工作的软件开发人员,创建一个允许您执行此操作的秘密/私有方法,并将其放入 ios 的下一个版本中。 【参考方案1】:

最简单的方法是通过NSUserDefaults:区域设置由AppleLocale(区域设置ID 作为字符串)确定,语言由AppleLanguages(语言ID 数组)中的第一个匹配项确定;您的应用可以仅为您的应用覆盖这些默认值。要检查它是否被您的应用程序覆盖,您可以使用 [defaults persistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]] objectForKey:@"AppleLocale"] 之类的东西。要删除覆盖,请使用-removeObjectForKey:

无论您采用哪种方式,在更改语言时您可能都必须relaunch the app; OS X 和 iOS 应用根本不是为了在运行时更改语言而设计的(在 OS X 上,只有新启动的应用才能看到语言更改;在 iOS 上,系统会终止所有应用以更改语言)。

我添加了此功能以使切换语言更容易进行开发/测试;我不知道这是否会通过 App Store 审核流程。

【讨论】:

谢谢@tc。听起来这可能是远离的事情,但我很欣赏详细的选择。

以上是关于iOS:有没有办法伪造用户的语言环境?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用 React-Intl 访问当前的语言环境?

如何在不同的语言环境中对日期对象进行 strftime? [复制]

iOS:复数和自定义语言环境

解决:SharePoint当中的STP网站列表模板没有办法导出到其它语言环境中使用

Zend 语言环境编号格式

iOS 应用程序因语言环境更改而崩溃