6

我想获取系统默认语言和系统区域设置。

我尝试了以下代码片段来获取系统当前语言环境,如下所示

NSLocale *locale;
locale = [NSLocale systemLocale];

NSString * localLanguage = [locale objectForKey:NSLocaleIdentifier];
NSLog (@"Language : %@", localLanguage); 

NSLog(@"System locale Identifier %@",[locale localeIdentifier]);

但是系统语言环境标识符没有显示任何内容。如果它是当前语言环境,它会给出正确的结果。为什么系统语言环境没有给出任何值以及如何获取系统默认语言而不是用户首选语言?请帮助

4

2 回答 2

10

您可以简单地使用: NSString* language = [[NSLocale preferredLanguages] objectAtIndex:0];

于 2012-11-26T11:32:28.387 回答
5

默认值NSLocaleIdentifier是有意@""指示没有当前选择。根据 Apple 的说法,systemLocale这只是对未在用户选择的区域设置 ( currentLocale) 中实现的键的后备,并且由于它始终处于设置状态并且始终处于用户的控制之下,因此这是有道理的。

如果您想关注用户的首选语言列表,您需要使用+ preferredLanguages,它会返回用户喜欢的语言列表,按用户喜欢的顺序排列。这适用于 OSX 和 iOS,并在选择语言时为系统提供适当的回退。

对于测试,您可以使用命令行开关-AppleLanguages,其值为逗号分隔、括号括起来的数组(例如(DE,FR,EN):),Xcode 将模拟用户的首选语言列表。

由于用户设置了首选语言(至少在 OSX 中),因此操作系统在为用户选择本地化数据时将遵循该列表。通常,由于这个事实,除了使用宏之外的任何操作都被认为是不必要的。但是,如果您有需要本地化的非资源信息,则可以手动查看该值。

于 2012-06-08T11:27:21.510 回答