Jestem w trakcie internacjonalizacji aplikacji na iPhone'a - muszę wprowadzić programowe zmiany w niektórych widokach w oparciu o aktualne ustawienia regionalne użytkownika. Oszalałem, ponieważ bez względu na preferencje językowe w symulatorze iPhone'a lub rzeczywisty sprzęt, locale
zawsze ocenia się jako „en_US”:
NSString *locale = [[NSLocale currentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Szaleństwem jest to, że reszta aplikacji zachowuje się zgodnie z oczekiwaniami. Odpowiednie ciągi są wybierane z pliku Localization.strings i używane w interfejsie, a także używane są prawidłowe pliki .xib dla wybranej lokalizacji.
Próbowałem również następujących rzeczy, bezskutecznie iz takim samym wynikiem:
NSString *locale = [[NSLocale autoupdatingCurrentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Czy brakuje mi czegoś prostego? Może preferencja czy może import?
Co robiłem:
Jak sugeruje odpowiedź Darrena, preferencji, której szukam, nie ma NSLocale
, a raczej jest tutaj:
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* languages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* preferredLanguage = [languages objectAtIndex:0];
NSLog(@"preferredLanguage: %@", preferredLang);
Odpowiedź Piotra wydaje się lepszym rozwiązaniem:
NSArray* preferredLanguages = [NSLocale preferredLanguages];
NSLog(@"preferredLanguages: %@", preferredLanguages);