iOS in-app语言更改

时间:2017-05-12 06:16:43

标签: ios locale

背景: 我的应用程序中有应用程序内语言更改,我还有基于区域设置的数字格式。我已经写了NSLocale的扩展来处理这个问题。我的语言环境包含应用内语言。这一切对我来说都很好。

问题: 在少数几个地方(ex键盘),仍然可以通过平台从[NSLocale locale]读取语言环境。当设备&应用内语言不同,这给我带来了问题。我试图通过将应用程序内语言设置为用户默认值来解决此问题。这可以工作,但只有在我杀了应用程序&再次重启它。重新启动后[NSLocale locale]返回正确的值,键盘的行为与我想要的一样。

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
NSString* lang = @"en_US"; 
[defaults setObject:@[lang] forKey:@"AppleLanguages"]; 
[defaults setObject:@[lang] forKey:@"NSLanguages"]; 
[defaults setObject:lang forKey:@"AppleLocale"]; 

问题1: 有没有合法的方法来杀死/重启应用程序? Apple自己就是在语言变更或通知设置更改中执行此操作。我有什么方法可以做到这一点吗?

问题2: 是否有其他方法可以解决我的问题?

1 个答案:

答案 0 :(得分:2)

  1. 虽然没有合法途径,但肯定是可能的。只需调用一个不存在的选择器。有些人甚至设置了一个以此为条件的日期,以便此功能仅在通过苹果审核流程后生效。

  2. 您需要调整以下系统方法并使用您自己的值覆盖它们:

     autoupdatingCurrentLocale
     systemLocale
     currentLocale
     preferredLanguages
     availableLocaleIdentifiers
    
  3. 如果您不知道如何操作,请查看http://nshipster.com/method-swizzling/ 以及JRSwizzle:https://github.com/rentzsch/jrswizzle

    HTH