我想要显示设备UI使用的当前语言。我应该使用什么代码?
我想把它作为一个NSString完全拼写出来的格式。(@ en_US)
编辑:对于那些开车路过的人来说,这里有大量有用的评论,因为随着新iOS版本的发布,答案也在不断变化。
我想要显示设备UI使用的当前语言。我应该使用什么代码?
我想把它作为一个NSString完全拼写出来的格式。(@ en_US)
编辑:对于那些开车路过的人来说,这里有大量有用的评论,因为随着新iOS版本的发布,答案也在不断变化。
当前回答
在Swift 4.2和Xcode 10.1中
let language = NSLocale.preferredLanguages[0]
debugPrint(language)//en
在Swift 5.x中
let langStr = Locale.current.languageCode
debugPrint(langStr ?? "") //en el
其他回答
如果你只想得到语言,这里是我建议的答案:
NSString *langplusreg = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString * langonly = [[langplusreg componentsSeparatedByString:@"-"]
objectAtIndex:0];
在我的情况下,我只是想Locale语言而不是Locale区域。
输出: 如果你的区域语言是日语,区域区域是日本,那么:
朗加雷格 = 是-JP
朗只 = 和
斯威夫特3
let locale = Locale.current
let code = (locale as NSLocale).object(forKey: NSLocale.Key.countryCode) as! String?
print(code!)
显然,解决方案依赖于,例如
[[NSLocale preferredLanguages] objectAtIndex:0]
通常工作正常,并返回当前设备语言。
但在某些情况下,它可能会产生误导:
如果你想要获取这个值的应用程序已经改变了语言,例如使用这样的代码:
NSString *lg = @"en"; // or anything like @"en", @"fr", etc.
[[NSUserDefaults standardUserDefaults]
setObject:[NSArray arrayWithObjects:lg, nil]
forKey:@"AppleLanguages"]
在这种情况下,[NSLocale preferredLanguages]实际上返回这个特定应用程序的首选语言集(和使用),而不是当前设备语言!
和…在这种情况下,正确获得实际当前设备语言(而不是之前在应用程序中设置的语言)的唯一方法是首先清除NSUserDefaults中的@"appleLanguages"键,像这样:
[[NSUserDefaults standardUserDefaults]removeObjectForKey:@"AppleLanguages"];
然后,[NSLocale preferredLanguages]现在返回正确的值。
希望这对你有所帮助。
这可能会给你你想要的:
NSLocale *locale = [NSLocale currentLocale];
NSString *language = [locale displayNameForKey:NSLocaleIdentifier
value:[locale localeIdentifier]];
它会在语言本身中显示语言的名称。 例如:
Français (France)
English (United States)
根据苹果文档
NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* languages = [defs objectForKey:@"AppleLanguages"];
NSString* preferredLang = [languages objectAtIndex:0];