Ios 如何为双倍长度的伪语言提供应用程序内设置

Ios 如何为双倍长度的伪语言提供应用程序内设置,ios,xcode,localization,Ios,Xcode,Localization,在Xcode中,您可以编辑方案并选择双倍长度的伪语言作为应用程序语言 这对于一次性构建非常有效,但我想在应用程序中添加一个UI切换,允许QA切换双倍长度的伪语言。QA的目标是进入应用程序内的调试设置菜单,并打开或关闭双倍长度伪语言 具体来说,是否有一种方法可以在代码中切换双长度伪语言?tl;博士 您可以通过为nsdoubleLocalizedString设置true来更改代码中的此设置。您必须在访问任何可本地化字符串之前设置此选项,以便将以下内容添加到应用程序中:didFinishLaunch

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

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

具体来说,是否有一种方法可以在代码中切换
双长度伪语言

tl;博士 您可以通过为
nsdoubleLocalizedString
设置
true
来更改代码中的此设置。您必须在访问任何可本地化字符串之前设置此选项,以便将以下内容添加到
应用程序中:didFinishLaunchingWithOptions:

斯威夫特:

UserDefaults.standard.set(true, forKey: "NSDoubleLocalizedStrings")
目标-C

[NSUserDefaults.standardUserDefaults setBool:YES forKey:@"NSDoubleLocalizedStrings"];
由于此键仅在应用程序第一次访问可本地化字符串时读取,为了在运行时更改此键以进行测试,您需要在
NSUserDefaults
中翻转此布尔值,然后关闭并重新启动应用程序,使其生效

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

更改scheme options(方案选项)此选项卡中的设置会更改启动二进制文件时发送到二进制文件的额外启动参数。例如,设置此语言字符串会导致启动应用程序时Xcode传递
-NSDoubleLocalizedStrings
。您可以通过创建新的Objective-C项目并添加在调用
UIApplicationMain
上方的
main.m
中:

for (int i = 0; i < argc; i++) {
    NSLog(@"Argument %d: %s", i, argv[i]);
}
for(int i=0;i
您可以在scheme editor中切换选项,并具体查看传递给二进制文件的字符串

下一部分是iOS如何处理这些启动参数。iOS SDK处理这些参数的方式是将它们覆盖在当前
NSUserDefaults
值设置为的任何值之上。因此,在本例中,这只是在启动时为
nsdoubleLocalizedString
设置
true
。这就是上述解决方案工作的原因

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