如何为双倍长度PseudoLanguage提供应用内设置

时间:2018-04-03 17:47:57

标签: ios xcode localization

在Xcode中,您可以编辑方案并选择双倍长度的PseudoLanguage作为应用程序语言。

enter image description here

这适用于一次性构建但我想在应用程序中添加UI切换,允许QA切换double-length PseudoLanguage。目标是让QA进入应用程序中的调试设置菜单并打开或关闭double-length PseudoLanguage

具体来说,有没有办法在代码中切换double-length PseudoLanguage

1 个答案:

答案 0 :(得分:2)

TL;博士

您可以在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内的应用中读取可本地化的字符串时加载的。