我想要显示设备UI使用的当前语言。我应该使用什么代码?
我想把它作为一个NSString完全拼写出来的格式。(@ en_US)
编辑:对于那些开车路过的人来说,这里有大量有用的评论,因为随着新iOS版本的发布,答案也在不断变化。
我想要显示设备UI使用的当前语言。我应该使用什么代码?
我想把它作为一个NSString完全拼写出来的格式。(@ en_US)
编辑:对于那些开车路过的人来说,这里有大量有用的评论,因为随着新iOS版本的发布,答案也在不断变化。
当前回答
迅速:
let languageCode = NSLocale.currentLocale().objectForKey(NSLocaleLanguageCode) as? String
其他回答
根据苹果文档
NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* languages = [defs objectForKey:@"AppleLanguages"];
NSString* preferredLang = [languages objectAtIndex:0];
这可能会给你你想要的:
NSLocale *locale = [NSLocale currentLocale];
NSString *language = [locale displayNameForKey:NSLocaleIdentifier
value:[locale localeIdentifier]];
它会在语言本身中显示语言的名称。 例如:
Français (France)
English (United States)
对于MonoTouch c#开发人员使用:
NSLocale.PreferredLanguages.FirstOrDefault() ?? "en"
注:我知道这是一个iOS问题,但作为MonoTouch开发者,这个页面上的答案引导我走向正确的方向,我想分享一下结果。
从iOS 9开始,如果你只想要语言代码而不需要国家代码,你将需要这种帮助函数——因为语言将包含国家代码。
// gets the language code without country code in uppercase format, i.e. EN or DE
NSString* GetLanguageCode()
{
static dispatch_once_t onceToken;
static NSString* lang;
dispatch_once(&onceToken, ^
{
lang = [[[NSLocale preferredLanguages] objectAtIndex:0] uppercaseString];
NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"^[A-Za-z]+" options:0 error:nil];
NSTextCheckingResult* match = [regex firstMatchInString:lang options:0 range:NSMakeRange(0, lang.length)];
if (match.range.location != NSNotFound)
{
lang = [lang substringToIndex:match.range.length];
}
});
return lang;
}
你可以使用NSLocale的displayNameForKey:value:方法:
// get a French locale instance
NSLocale *frLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"fr_FR"] autorelease];
// use it to get translated display names of fr_FR and en_US
NSLog(@"%@", [frLocale displayNameForKey:NSLocaleIdentifier value:@"fr_FR"]);
NSLog(@"%@", [frLocale displayNameForKey:NSLocaleIdentifier value:@"en_US"]);
这将打印出:
français (France)
anglais (États-Unis)
如果你为initWithLocaleIdentifier:和displayNameForKey:value:方法指定了相同的语言环境标识符,那么它会给你语言的本机名称。我发现,如果你删除国家代码,只使用fr和en,它也会从显示名称中省略国家(至少在Mac OS X上,不确定iOS)。