2015-09-18 26 views
6

我現在如何獲得實際的系統語言?看起來他們在最後一次衝刺後放置了區域後綴。因此在cs之前現在是cs-DE如果語言是捷克語並且區域設置是德語。但是有些語言沒有像GB語言en-GB這樣的後綴,但是區域設置是德語。iOS9 AppleLanguages與舊iOS不同

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

回答

9

NSLocale類使用componentsFromLocaleIdentifier方法

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]

+0

的LocaleID應該是NSString的我客串 – kubo

+0

的確,固定;) – Imotep

5

我剛剛遇到這個問題最近。根據Apple's documentation,你會得到區域標識符與區域標識符,這就像在iOS 9上的[language designator]-[region designator]一樣。 我發現了一個解決方案,如果你只想獲得區域設置ID,你可以使用
[[NSBundle mainBundle] preferredLocalizations]

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」會給你當前的langauge這樣你就可以用它本地化或任何進一步的使用。