启动参数(NSDoubleLocalizedStrings,NSShowNonLocalizedStrings)不起作用

时间:2017-05-28 14:24:57

标签: ios objective-c swift xcode localization

我尝试使用NSDoubleLocalizedStringsNSShowNonLocalizedStrings等启动参数来测试Objective-C项目中的本地化。出于某种原因,我无法让他们都工作。我尝试在方案设置中设置启动和选项的两个参数:enter image description here  enter image description here 我还检查了NSUserDefaults个密钥,它们都是YES。但这些论点仍然不起作用。

为了确保它不是XCode错误,我在Objective-C和Swift上创建了一个绝对新的单视图项目,视图上有一个标签。这两个项目都有空Localizable.strings个文件,这些项目中的代码如下:

@interface ViewController ()
@property (nonatomic, strong) IBOutlet UILabel *label;
@end

@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    self.label.text = NSLocalizedString(@"Some text", nil);
}
@end

class ViewController: UIViewController {
    @IBOutlet var label: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        label.text = NSLocalizedString("Some text", comment: "")
    }
}

结果如下:

enter image description here

以下是问题:

1)启动论点在我的Objective-C项目中不起作用的原因是什么?

2)为什么NSDoubleLocalizedStrings参数在Swift中不起作用?

1 个答案:

答案 0 :(得分:2)

花了几天时间调查并逐步删除Objective-C项目中的所有文件和框架我发现原因是在AFNetworking库中。问题描述为here。如果您想在项目中使用AFNetworking并调试本地化问题,可以将这些行添加到application: didFinishLaunchingWithOptions:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setBool:YES forKey:@"NSDoubleLocalizedStrings"];
[defaults setBool:YES forKey:@"NSShowNonLocalizedStrings"];
[defaults synchronize];

第二次启动应用程序时,您会看到这些启动参数正常运行。

关于为什么NSDoubleLocalizedStrings参数在Swift中不起作用的第二个问题的答案是,它可能是XCode中的一个错误。它可能与Swift中不支持的宏相关联,而NSLocalizedString实际上是一个宏。因此,我在radar上创建了一个错误。