我想要显示设备UI使用的当前语言。我应该使用什么代码?
我想把它作为一个NSString完全拼写出来的格式。(@ en_US)
编辑:对于那些开车路过的人来说,这里有大量有用的评论,因为随着新iOS版本的发布,答案也在不断变化。
我想要显示设备UI使用的当前语言。我应该使用什么代码?
我想把它作为一个NSString完全拼写出来的格式。(@ en_US)
编辑:对于那些开车路过的人来说,这里有大量有用的评论,因为随着新iOS版本的发布,答案也在不断变化。
当前回答
简单Swift 3功能:
@discardableResult
func getLanguageISO() -> String {
let locale = Locale.current
guard let languageCode = locale.languageCode,
let regionCode = locale.regionCode else {
return "de_DE"
}
return languageCode + "_" + regionCode
}
其他回答
在Swift中,有一个更简单的方法来获得当前应用程序语言:
Locale(identifier: Bundle.main.preferredLocalizations[0]).languageCode!
它可以像这样切换,例如:
let supportUrl: URL = {
switch Locale(identifier: Bundle.main.preferredLocalizations[0]).languageCode {
case "de":
return Constants.supportUrlGerman
default:
return Constants.supportUrlEnglish
}
}
我希望这能有所帮助!
对于Swift 3.0,下面的代码可以用来回答你的问题:
let language = Bundle.main.preferredLocalizations.first! as NSString
你可以使用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)。
迅速:
let languageCode = NSLocale.currentLocale().objectForKey(NSLocaleLanguageCode) as? String
选择的答案返回当前设备语言,但不是应用程序中使用的实际语言。如果你没有在应用程序中为用户的首选语言提供本地化,则使用第一个可用的本地化,按用户的首选顺序排序。
要发现在本地化中选择的当前语言,请使用
[[NSBundle mainBundle] preferredLocalizations];
例子:
NSString *language = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0];
迅速:
let language = NSBundle.mainBundle().preferredLocalizations.first as NSString