在Xcode中,您可以编辑方案并选择双倍长度的PseudoLanguage作为应用程序语言。
这适用于一次性构建但我想在应用程序中添加UI切换,允许QA切换double-length PseudoLanguage
。目标是让QA进入应用程序中的调试设置菜单并打开或关闭double-length PseudoLanguage
。
具体来说,有没有办法在代码中切换double-length PseudoLanguage
?
答案 0 :(得分:2)
您可以在true
中为NSDoubleLocalizedStrings
键设置NSUserDefaults
,从代码更改此设置。您必须在访问任何可本地化的字符串之前设置此项,因此请将以下内容添加到application:didFinishLaunchingWithOptions:
。
夫特:
UserDefaults.standard.set(true, forKey: "NSDoubleLocalizedStrings")
目标-C
[NSUserDefaults.standardUserDefaults setBool:YES forKey:@"NSDoubleLocalizedStrings"];
由于只有在您的应用第一次访问可本地化的字符串时才会读取此键,为了在运行时更改此值以进行测试,您需要在NSUserDefaults
中翻转此布尔值然后终止并重新启动应用程序让它生效。
由于您发布的屏幕截图中的方案设置仅适用于从Xcode运行应用程序时,它不会影响存档构建。相反,你可以通过在iOS应用程序中使用启动参数的一些不错的功能来实现这一点(可以在[本演讲](this talk)中详细介绍这一点。
更改方案选项的此选项卡中的设置,更改在启动时将多余的启动参数发送到二进制文件。例如,设置此语言字符串会导致Xcode在您启动应用时传递-NSDoubleLocalizedStrings
。您可以通过创建新的Objective-C项目来查看此行为,并在main.m
的调用上方UIApplicationMain
中添加此项:
for (int i = 0; i < argc; i++) {
NSLog(@"Argument %d: %s", i, argv[i]);
}
您可以在方案编辑器中切换选项,并具体查看哪些字符串传递给您的二进制文件。
下一部分是iOS如何处理这些启动参数。 iOS SDK处理这些内容的方式是将它们叠加在当前NSUserDefaults
值设置的顶部。因此,在这种情况下,这只会在发布时为true
设置NSDoubleLocalizedStrings
。这就是上述解决方案有效的原因。
简单地说,如果在运行时更改标志,这似乎不起作用的原因是因为这些设置是在您第一次在dispatch_once
内的应用中读取可本地化的字符串时加载的。