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

Akb*_*bar 6 macos cocoa objective-c nslocale

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

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

NSLocale *locale;
locale = [NSLocale systemLocale];

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

NSLog(@"System locale Identifier %@",[locale localeIdentifier]);
Run Code Online (Sandbox Code Playgroud)

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

use*_*963 9

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


gai*_*ige 5

默认NSLocaleIdentifier是有意@""指示当前没有选择.根据Apple的说法,systemLocale只是在用户选择的语言环境(currentLocale)中没有实现的键的后备,并且因为它始终设置并且始终在用户的控制之下,所以它是有意义的.

如果您想要按照用户的首选语言列表进行操作,您+ preferredLanguages可以按照用户喜欢的顺序使用,这将返回用户喜欢的语言列表.这适用于OSX和iOS,并且在选择语言时用于为系统提供适当的后备.

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

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