iOS9 AppleLanguages与旧版iOS

时间:2015-09-18 13:26:09

标签: ios xcode cocoa-touch ios9

我现在如何获得实际的系统语言?似乎他们在最后一次冲刺后放置了区域后缀。因此,如果语言为捷克语且区域设置为德语,则cs现在cs-DE之前。但是有些语言没有GB语言的后缀en-GB,但区域设置是德语。

NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* language = [defs objectForKey:@"AppleLanguages"];
NSString* preferredLang = [language objectAtIndex:0];
NSLog(@"localeIdentifier: %@", preferredLang);

3 个答案:

答案 0 :(得分:9)

使用componentsFromLocaleIdentifier

中的NSLocale方法

Here is the documentation

你可以这样做:

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"将为您提供当前的语言,以便您可以将其用于本地化或任何进一步的使用。