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

Kri*_*lci 1 xcode localization ios

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

在此输入图像描述

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

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

Kei*_*ley 5

太长了;博士

true您可以通过设置 中的NSDoubleLocalizedStrings键来从代码中更改此设置NSUserDefaults。您必须在访问任何可本地化字符串之前设置此项,因此将以下内容添加到application:didFinishLaunchingWithOptions:.

迅速:

UserDefaults.standard.set(true, forKey: "NSDoubleLocalizedStrings")
Run Code Online (Sandbox Code Playgroud)

Objective-C

[NSUserDefaults.standardUserDefaults setBool:YES forKey:@"NSDoubleLocalizedStrings"];
Run Code Online (Sandbox Code Playgroud)

由于此密钥仅在您的应用程序第一次访问可本地化字符串时读取,因此为了在运行时更改此值以进行测试,您需要翻转此布尔值,NSUserDefaults然后终止并重新启动应用程序才能使其生效。

更多细节:

由于您发布的屏幕截图中的方案设置仅在您从 Xcode 运行应用程序时适用,因此它不会影响存档构建。相反,您可以通过利用 iOS 应用程序中启动参数的一些不错的功能来做到这一点(可能会在 [本演讲](本演讲)中了解更多详细信息。

更改方案选项此选项卡中的设置,会更改启动二进制文件时发送到您的二进制文件的额外启动参数。例如,设置此语言字符串会导致 Xcode-NSDoubleLocalizedStrings在您启动应用程序时通过。您可以通过创建一个新的 Objective-C 项目并将其添加到以下main.m调用上方来查看此行为UIApplicationMain

for (int i = 0; i < argc; i++) {
    NSLog(@"Argument %d: %s", i, argv[i]);
}
Run Code Online (Sandbox Code Playgroud)

您可以在方案编辑器中切换选项,并具体查看哪些字符串被传递到您的二进制文件。

下一部分是 iOS 如何处理这些启动参数。NSUserDefaultsiOS SDK 处理这些的方式是将它们覆盖在当前设置的值之上。因此,在这种情况下,这只是在启动时设置trueNSDoubleLocalizedStrings。这就是上述解决方案有效的原因。

简而言之,如果您在运行时更改标志,这似乎不起作用,因为这些设置是在您第一次在应用程序中读取可本地化字符串时加载的dispatch_once