我正在国际化一个 iPhone 应用程序的过程中——我需要根据用户当前的语言环境对某些视图进行编程更改。我要发疯了,因为不管 iPhone 模拟器或实际硬件的语言偏好是什么,locale
的值总是“ en _ US”:
NSString *locale = [[NSLocale currentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
令人不可思议的是,应用程序的其余部分都按照预期的方式运行。从 Localization.string 文件中选择正确的字符串并在接口中使用,而正确的。将使用所选区域设置的 xib 文件。
我还尝试了以下方法,但没有效果,结果也是一样:
NSString *locale = [[NSLocale autoupdatingCurrentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
我是不是漏掉了什么简单的东西? 是偏好还是重要性?
我过去常做的:
正如达伦的回答所表明的那样,我所寻找的偏好并不在 NSLocale
中,而是在这里:
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* languages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* preferredLanguage = [languages objectAtIndex:0];
NSLog(@"preferredLanguage: %@", preferredLang);
彼得的回答似乎是一个更好的解决方案:
NSArray* preferredLanguages = [NSLocale preferredLanguages];
NSLog(@"preferredLanguages: %@", preferredLanguages);