我现在如何获得实际的系统语言?似乎他们在最后一次冲刺后放置了区域后缀。因此,如果语言为捷克语且区域设置为德语,则cs
现在cs-DE
之前。但是有些语言没有GB语言的后缀en-GB
,但区域设置是德语。
NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* language = [defs objectForKey:@"AppleLanguages"];
NSString* preferredLang = [language objectAtIndex:0];
NSLog(@"localeIdentifier: %@", preferredLang);
答案 0 :(得分:9)
使用componentsFromLocaleIdentifier
类
NSLocale
方法
你可以这样做:
NSString* localeID = [NSLocale currentLocale].localeIdentifier;
NSDictionary* components = [NSLocale componentsFromLocaleIdentifier:localeID];
NSString* languageID = components[NSLocaleLanguageCode];
修改强>
如果当前翻译的应用语言不是设备的语言,那么以这种方式获取语言会产生一些问题。确实,
components[NSLocaleLanguageCode]
将返回设备的语言。
要获取应用的当前语言,您应该使用[[NSBundle mainBundle] preferredLocalizations].firstObject
。
要获取设备的区域,您仍然可以使用components[NSLocaleCountryCode]
答案 1 :(得分:5)
我最近遇到了这个问题。根据{{3}},您将获得带有区域指示符的区域设置ID,类似于iOS 9上的[language designator]-[region designator]
。
我找到了一个解决方案,如果你只想获得语言环境ID,你可以使用
[[NSBundle mainBundle] preferredLocalizations]
。
答案 2 :(得分:1)
另外一个解决方案,如果有人喜欢,
NSArray *languages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];
NSString *currentLanguage = [languages objectAtIndex:0];
if ([[currentLanguage componentsSeparatedByString:@"-"] count] == 2)
currentLanguage = [[currentLanguage componentsSeparatedByString:@"-"] objectAtIndex:0];
// Only for chinese Language.
else if ([[currentLanguage componentsSeparatedByString:@"-"] count] == 3)
currentLanguage = [NSString stringWithFormat:@"%@-%@", [[currentLanguage componentsSeparatedByString:@"-"] objectAtIndex:0],
[[currentLanguage componentsSeparatedByString:@"-"] objectAtIndex:1]
];
" currentLanguage"将为您提供当前的语言,以便您可以将其用于本地化或任何进一步的使用。