NSLocale currentLocale始终返回"en_US"而不是用户的当前语言

Pra*_*ogg 79 iphone cocoa objective-c internationalization

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

NSString *locale = [[NSLocale currentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Run Code Online (Sandbox Code Playgroud)

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

我也试过以下,但没有用,结果相同:

NSString *locale = [[NSLocale autoupdatingCurrentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Run Code Online (Sandbox Code Playgroud)

我有什么简单的东西吗?可能是偏好还是导入?

我以前做的:

正如Darren的回答所暗示的那样,我正在寻找的偏好不在NSLocale,而是在这里:

NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* languages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* preferredLanguage = [languages objectAtIndex:0];
NSLog(@"preferredLanguage: %@", preferredLang);
Run Code Online (Sandbox Code Playgroud)

彼得的答案似乎是一个更好的解决方案:

NSArray* preferredLanguages = [NSLocale preferredLanguages];
NSLog(@"preferredLanguages: %@", preferredLanguages);
Run Code Online (Sandbox Code Playgroud)

Dar*_*ren 57

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

  • iOS 8不是这种情况.如果您的语言是德语并且您所在的地区是美国,iOS 8将返回"de_US".这是它应该做的. (3认同)
  • 嗨Prairiedogg,你是如何获得当前语言设置的?我也有同样的问题..都返回语言的 EN 值。 (2认同)

Pet*_*sey 35

不要直接使用未记录的密钥查询默认值,而是向NSLocale 询问首选语言数组.

  • "AppleLanguages"键没有记录,它是在OS X 10.5之前获得用户首选语言的唯一记录方式(这些日子非常罕见,但仍然是[******记录]( https://developer.apple.com/library/mac/qa/qa1391/_index.html)). (2认同)

sus*_*t86 17

要获取当前设备语言,请改用:

NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

如下所述: 在iOS中获取当前的设备语言?


Sim*_*son 7

对我们来说,问题是我们在开发方案中覆盖了应用程序语言和应用程序区域.确保在方案选项(编辑方案 - >选项)中将应用程序语言设置为系统语言.