我想要显示设备UI使用的当前语言。我应该使用什么代码?
我想把它作为一个NSString完全拼写出来的格式。(@ en_US)
编辑:对于那些开车路过的人来说,这里有大量有用的评论,因为随着新iOS版本的发布,答案也在不断变化。
我想要显示设备UI使用的当前语言。我应该使用什么代码?
我想把它作为一个NSString完全拼写出来的格式。(@ en_US)
编辑:对于那些开车路过的人来说,这里有大量有用的评论,因为随着新iOS版本的发布,答案也在不断变化。
当前回答
斯威夫特
获取设备的当前语言
NSLocale.preferredLanguages()[0] as String
获取应用程序语言
NSBundle.mainBundle().preferredLocalizations[0] as NSString
注意:
它获取你在info.plist的CFBundleDevelopmentRegion中给出的语言
如果CFBundleAllowMixedLocalizations在info中为true。plist然后info中的cfbundlelocizations的第一项。返回Plist
其他回答
在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
}
}
我希望这能有所帮助!
对于MonoTouch c#开发人员使用:
NSLocale.PreferredLanguages.FirstOrDefault() ?? "en"
注:我知道这是一个iOS问题,但作为MonoTouch开发者,这个页面上的答案引导我走向正确的方向,我想分享一下结果。
两封信的格式。苹果使用ISO标准ISO-3166。
NSString *localeCountryCode = [[NSLocale autoupdatingCurrentLocale] objectForKey:NSLocaleCountryCode];
提供的解决方案实际上会返回设备的当前区域——而不是当前选择的语言。这些通常是同一件事。但是,如果我在北美,我将我的语言设置为日语,我的区域仍然是英语(美国)。为了检索当前选择的语言,你可以这样做:
NSString * language = [[NSLocale preferredLanguages] firstObject];
这将为当前选择的语言返回两个字母的代码。英语是“en”,西班牙语是“es”,德语是“de”,等等。更多例子,请参阅维基百科的条目(特别是639-1列):
ISO 639-1代码列表
然后,将这两个字母的代码转换为您想要显示的字符串就很简单了。如果是"en",显示"English"。
EDIT
值得引用NSLocale.h中的头信息:
+ (NSArray *)preferredLanguages NS_AVAILABLE(10_5, 2_0); // note that this list does not indicate what language the app is actually running in; the [NSBundle mainBundle] object determines that at launch and knows that information
对应用语言感兴趣的人可以看看@mindvision的答案
将语言代码(如en_US)翻译成英语(United States)是NSLocale的内置特性,NSLocale并不关心你从哪里获得语言代码。因此,确实没有理由像公认的答案所建议的那样实现自己的翻译。
// Example code - try changing the language codes and see what happens
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en"];
NSString *l1 = [locale displayNameForKey:NSLocaleIdentifier value:@"en"];
NSString *l2 = [locale displayNameForKey:NSLocaleIdentifier value:@"de"];
NSString *l3 = [locale displayNameForKey:NSLocaleIdentifier value:@"sv"];
NSLog(@"%@, %@, %@", l1, l2, l3);
印刷:英语,德语,瑞典语