【问题标题】:iOS in-app language changeiOS 应用内语言更改
【发布时间】:2023-03-31 10:05:01
【问题描述】:

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

问题: 在少数地方(前键盘)区域设置仍由平台从 [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: 有没有其他方法可以解决我的问题?

【问题讨论】:

  • 只是一个想法,但是您可以在应用程序开始时使用 locale 方法而不是扩展程序来检查您想要的结果吗?这甚至适用于在不重新启动的情况下不使用您的扩展程序的地方,不是吗?我可能是错的,但也许值得进行测试以避免试图绕过应用程序审查(如果他们发现这可能对你不利)。还要注意stackoverflow.com/questions/4399611 中的几个答案,这些答案解释了在某些设计中,Apple 可能允许使用普通的旧exit(0) 退出。

标签: ios locale


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

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

     autoupdatingCurrentLocale
     systemLocale
     currentLocale
     preferredLanguages
     availableLocaleIdentifiers
    

如果您不知道如何操作,请查看http://nshipster.com/method-swizzling/ 还有 JRSwizzle:https://github.com/rentzsch/jrswizzle

HTH

【讨论】:

  • 哦,看这里,也许我应该在评论问题之前阅读其他答案。 :) 我会尝试 swizzling,因为在应用审查过程中作弊听起来很危险,imo(就对您的开发人员会员资格的影响而言,我希望即使 Apple 也不会派出暴徒来追捕你……;D)。跨度>
猜你喜欢
  • 2013-10-08
  • 2011-11-28
  • 1970-01-01
  • 2013-03-04
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多