我尝试使用NSDoubleLocalizedStrings
和NSShowNonLocalizedStrings
等启动参数来测试Objective-C项目中的本地化。出于某种原因,我无法让他们都工作。我尝试在方案设置中设置启动和选项的两个参数:
我还检查了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: "")
}
}
结果如下:
以下是问题:
1)启动论点在我的Objective-C项目中不起作用的原因是什么?
2)为什么NSDoubleLocalizedStrings
参数在Swift中不起作用?
答案 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上创建了一个错误。