我如何获得当前的应用程序语言环境?
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]
}
希望对您有所帮助。
可能有比这更简单的方法(参见其他答案),但这个方法最可靠,只要遵循通过 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"
我需要获取当前语言环境。不是用户语言环境,而是我的应用程序语言环境。
假设我的应用程序有两个本地化版本(在项目设置中):英语(默认)和法语。如果用户在 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]
}
希望对您有所帮助。
可能有比这更简单的方法(参见其他答案),但这个方法最可靠,只要遵循通过 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"