Я перебуваю в процесі інтернаціоналізації програми для 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);