2015-09-18 13 views
6

Jak mogę uzyskać aktualny język systemu? Wygląda na to, że po ostatnim kresie dodali regionalny sufiks. Tak więc przed cs jest teraz cs-DE, jeśli językiem jest język czeski, a ustawienie regionalne to język niemiecki. Ale są pewne języki, które nie mają sufiksu, takiego jak język GB, to en-GB, ale ustawienie regionalne to język niemiecki.Język iOS9 AppleLanguages ​​różni się od starszego iOS

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

Odpowiedz

9

Użyj metody componentsFromLocaleIdentifier z NSLocale klasy

Here is the documentation

Można zrobić tak:

NSString* localeID = [NSLocale currentLocale].localeIdentifier; 
NSDictionary* components = [NSLocale componentsFromLocaleIdentifier:localeID]; 
NSString* languageID = components[NSLocaleLanguageCode]; 

EDIT

Pierwsze język ten sposób stworzy pewne problemy, jeśli język, w którym aplikacja jest obecnie tłumaczona nie jest językiem urządzenia. Rzeczywiście, components[NSLocaleLanguageCode] zwróci język urządzenia. Aby uzyskać aktualny język aplikacji, należy użyć numeru .

Aby uzyskać obszar urządzenia, można nadal korzystać components[NSLocaleCountryCode]

+0

LocaleID powinny być NSString I gues – kubo

+0

rzeczywiście stałe;) – Imotep

5

Właśnie napotkałem ten problem niedawno. Zgodnie z Apple's documentation otrzymasz identyfikator lokalizacji z oznaczeniem regionu, który podobnie jak [language designator]-[region designator] na iOS 9. Znalazłem rozwiązanie, jeśli chcesz uzyskać identyfikator lokalizacji, możesz użyć
[[NSBundle mainBundle] preferredLocalizations].

1

Jeszcze rozwiązanie, Jeśli ktoś z was chce,

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” daje bieżącej langauge więc można go używać do lokalizowania lub jakiegokolwiek dalszego wykorzystania.

Powiązane problemy