Я нахожусь в процессе интернационализации приложения для iPhone - мне нужно внести программные изменения в определенные представления в зависимости от текущей локали пользователя. Я схожу с ума, потому что независимо от языкового предпочтения симулятора iPhone или реального оборудования, locale
всегда оценивается как «en_US»:
NSString *locale = [[NSLocale currentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Сумасшедшая вещь в том, что остальная часть приложения ведет себя так, как ожидалось. Правильные строки выбираются из файла Localization.strings и используются в интерфейсе, а правильные файлы .xib для выбранной локали используются.
Я также попробовал следующее, но безрезультатно и с тем же результатом:
NSString *locale = [[NSLocale autoupdatingCurrentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Есть что-то простое, что мне не хватает? Может быть, предпочтение или импорт?
Что я делал раньше:
Как показывает ответ Даррена, я ищу предпочтение не в NSLocale
, а в следующем:
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* languages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* preferredLanguage = [languages objectAtIndex:0];
NSLog(@"preferredLanguage: %@", preferredLang);
Ответ Петра кажется лучшим решением:
NSArray* preferredLanguages = [NSLocale preferredLanguages];
NSLog(@"preferredLanguages: %@", preferredLanguages);