我如何获得当前的应用程序语言环境?
我需要获取当前的语言环境。 不是用户区域设置,但我的应用程序区域设置
假设我的应用程序有两个本地化(在项目设置中):英语(默认)和法语。 如果用户在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
希望这会帮助你。