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

How do I get current application locale?

我需要获取当前语言环境。不是用户语言环境,而是我的应用程序语言环境。

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

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

您可以通过这种方式从语言环境中获取国家代码,

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

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

您可以映射此代码以供您选择界面。

希望对您有所帮助。

在Swift3中使用:

let language = Bundle.main.preferredLocalizations.first

所选答案returns当前设备语言,但不是应用中使用的实际语言。如果您没有为应用中的首选语言提供本地化:

NSString *language = NSBundle.mainBundle.preferredLocalizations.firstObject;

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);

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

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

希望对您有所帮助。

可能有比这更简单的方法(参见其他答案),但这个方法最可靠,只要遵循通过 strings- 本地化应用程序的一般原则文件不会过时,此方法将起作用。

通常,您不需要获取应用程序区域设置(但继续阅读,这是可能的!)如果您需要本地化文本,请使用 NSLocalizedString()。如果您需要本地化图像,您可以使用本地化资源,等等。但是,我能想到的原因有哪些会让您获得 "application locale" 变得很好:例如用于分析(您想知道您的应用程序使用哪种语言),或用于提供如果您使用基于服务器的通信,则为用户提供一致的一种语言界面(例如,将服务器错误消息本地化为用户在应用程序中看到的相同语言。)

如果您想获得当前可见的应用程序的本地化,我想您有一个 Localizable.strings 文件用于每个支持的语言环境。因此,在英文字符串文件中,您可以添加行

"lang" = "en";

然后在法语字符串文件中添加行

"lang" = "fr";

然后,您始终可以通过调用 NSLocalizedString("lang") (swift) 或 NSLocalizedString(@"lang") (objective-C) 来获取应用程序区域设置。当然,无论何时向应用程序添加新的本地化,都必须在新的本地化字符串文件中设置 "lang" 条目。

解决方案比建议的解决方案简单得多:

设备语言

let deviceLanguage = NSLocale.preferredLanguages.first

实际应用翻译

let language = Bundle.main.preferredLocalizations.first

例如,我将 iPhone 设置为英语-印度语,而我的应用没有英语-印度语翻译,只有英语-英国语:

Printing description of language:
"en-GB"
Printing description of deviceLanguage:
"en-IN"