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

标签 ios xcode localization

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

enter image description here

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

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

最佳答案

tl;博士

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

迅速:

UserDefaults.standard.set(true, forKey: "NSDoubleLocalizedStrings")

Objective-C
[NSUserDefaults.standardUserDefaults setBool:YES forKey:@"NSDoubleLocalizedStrings"];

由于此键仅在您的应用程序第一次访问可本地化字符串时读取,为了在运行时更改它以进行测试,您需要在 NSUserDefaults 中翻转此 bool 值然后杀死并重新启动应用程序使其生效。

更多细节:

由于您发布的屏幕截图中的方案设置仅适用于您从 Xcode 运行应用程序时,因此它不会影响存档构建。相反,您可以通过在 iOS 应用程序中利用启动参数的一些不错的功能来做到这一点(可能会在 [this talk](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 中读取应用程序中的可本地化字符串时加载的。 .

关于ios - 如何为双长度 PseudoLanguage 提供应用内设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49636262/

相关文章:

ios - 具有多个 GUI 的 Xcode iOS 应用程序

objective-c - 在对象 'delegate' 上找不到属性 'AddEventViewController'

javascript - 是否有任何 javascript 库实现了瑞典语等字母的排序方法?

ios - Xcode 9.2 导出或导入 xliff 时崩溃

ios - 自动使 View Controller 启动 Segue 转换

ios - TextField Input 不更新其他类中的@Published ObservedObject (SwiftUI)

ios - 如何为 UITableView 和 UISearchBar 创建透明背景

android - CyanogenMod:翻译项目

ios - UITableView 中的自定义单元格在滑动后立即移动以进行编辑

ios - UINavigationBar的完全自定义