我如何获得当前的应用程序语言环境?

我需要获取当前的语言环境。 不是用户区域设置,但我的应用程序区域设置

假设我的应用程序有两个本地化(在项目设置中):英语(默认)和法语。 如果用户在iPhone上设置法语,那么我的应用程序将显示法语界面。 如果用户在iPhone上设置德语,那么我的应用程序将显示英文界面(因为英文是默认的)。

那么如何获得当前正在显示的当前应用程序语言环境? 提前致谢。

所选答案返回当前设备语言,但不是应用程序中使用的实际语言。 如果您不在应用中提供首选语言的本地化版本

NSString *language = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0] NSLocale *locale = [NSLocale currentLocale]; NSString *countryCode = [locale objectForKey: NSLocaleCountryCode]; NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; NSString *country = [usLocale displayNameForKey: NSLocaleCountryCode value: countryCode]; NSLog(@"country . %@",country); 

可能比这更简单的方法(请参阅其他答案),但是这个方法是最健壮的,只要通过strings文件本地化应用程序的一般原则不会被废弃,该方法就可以工作。

通常,您不需要获取应用程序语言环境(但可以继续阅读,这是可能的!)如果要使用本地化文本,请使用NSLocalizedString() 。 如果您需要本地化您使用本地化资源的图像,依此类推。 然而,我可以想到,有些理由让我们能够很好地获得“应用程序语言环境”,例如分析(您想知道您的应用程序使用哪种语言),或者提供如果您使用基于服务器的通信(例如,使用用户在应用程序中看到的相同语言本地化服务器错误消息),则可以为用户提供一致的单一语言界面。

如果你想获得当前可见的应用程序的本地化,我想你有一个Localizable.strings文件为每个受支持的区域设置。 所以,在英文string文件中,您可以添加该行

 "lang" = "en"; 

并在法文string文件中添加该行

 "lang" = "fr"; 

然后,通过调用NSLocalizedString("lang") (swift)或NSLocalizedString(@"lang") (objective-C),您总是可以获取应用程序语言环境。 当然,无论何时向应用程序添加新的本地化,都必须将“lang”条目设置为新的本地化string文件。

在Swift 3中使用:

let language = Bundle.main.preferredLocalizations.first

你可以从语言环境获取国家代码,这样,

 NSLocale *currentLocale = [NSLocale currentLocale]; // get the current locale. NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode]; 

获取国家代码,例如es (西class牙), fr (法国)等

您可以将此代码映射到您的界面select。

希望这对你有所帮助。

您可以使用以下代码获取选定的语言。

 NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0]; if ([language isEqualToString:@"fr"]){//French [do your stuff] } else{//English [do your stuff] } 

List_of_ISO_639-1_codes

希望这会帮助你。