iphone - NSLocale currentLocale 总是返回 "en_US"而不是用户的当前语言

标签 iphone objective-c cocoa internationalization

我正在对 iPhone 应用程序进行国际化 - 我需要根据用户当前的语言环境对某些 View 进行编程更改。我要疯了,因为无论 iPhone 模拟器或实际硬件上的语言偏好是什么,locale 总是评估为“en_US”:

NSString *locale = [[NSLocale currentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);

令人疯狂的是,应用程序的其余部分按预期运行。从 Localization.strings 文件中选择正确的字符串并在界面中使用,并使用所选语言环境的正确 .xib 文件。

我也尝试了以下方法,但无济于事,结果相同:

NSString *locale = [[NSLocale autoupdatingCurrentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);

我缺少一些简单的东西吗?可能是偏好还是进口?

我曾经做过的事情:

正如 Darren 的回答所暗示的,我正在寻找的偏好不在 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);

最佳答案

[NSLocale currentLocale] 基于设备的区域格式设置,而不是语言。如果地区设置为美国,无论您使用哪种语言,您都将获得 en_US。

关于iphone - NSLocale currentLocale 总是返回 "en_US"而不是用户的当前语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1522210/

相关文章:

iphone - 对象 : avoid protocol method name conflicts?

cocoa - 为什么要子类化 NSManagedObject 呢?

iphone - SplitViewController 委托(delegate)方法没有响应

iPhone:NSDate 和夏令时

iphone - 将图像映射到不规则多边形?

iphone - 如何从 NSStreams 读取/写入整数

iphone - 点击时隐藏导航栏

iphone - 键盘上方的 UIToolbar - iPhone SDK

objective-c - 使用 Objective c 在文本文件中的指定行插入字符串

objective-c - NS图像旋转