Estoy en el proceso de internacionalizar una aplicación de iPhone; necesito realizar cambios programáticos en ciertas vistas en función de la configuración regional actual del usuario. Me estoy volviendo loco porque no importa cuál sea la preferencia de idioma en el simulador de iPhone o el hardware real, locale
siempre se evalúa como "en_US":
NSString *locale = [[NSLocale currentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
Lo loco es que el resto de la aplicación se comporta como se esperaba. Las cadenas correctas se seleccionan del archivo Localization.strings y se usan en la interfaz, y se usan los archivos .xib correctos para la configuración regional seleccionada.
También he probado lo siguiente, en vano y con el mismo resultado:
NSString *locale = [[NSLocale autoupdatingCurrentLocale] localeIdentifier];
NSLog(@"current locale: %@", locale);
¿Hay algo simple que me falta? ¿Una preferencia o quizás una importación?
Lo que solía hacer:
Como sugiere la respuesta de Darren, la preferencia que estoy buscando no está en NSLocale
, sino aquí:
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSArray* languages = [userDefaults objectForKey:@"AppleLanguages"];
NSString* preferredLanguage = [languages objectAtIndex:0];
NSLog(@"preferredLanguage: %@", preferredLang);
La respuesta de Peter parece ser una mejor solución:
NSArray* preferredLanguages = [NSLocale preferredLanguages];
NSLog(@"preferredLanguages: %@", preferredLanguages);