如何在cocoa中获取系统区域设置和系统语言

时间:2012-06-08 11:07:41

标签: objective-c macos cocoa nslocale

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

我已尝试使用以下代码段来获取系统当前区域设置,如下所示

NSLocale *locale;
locale = [NSLocale systemLocale];

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

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

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

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:5)

默认NSLocaleIdentifier有意@""表示当前没有选择。根据Apple的说法,systemLocale只是未在用户选择的区域设置(currentLocale)中实现的密钥的后备,并且因为它始终设置并且始终在用户的控制之下,所以它是有意义的。

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

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

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