Lenguaje manual con NumberFormatter correcto y localizedStringWithFormat

Agregué una sección de idioma manual dentro de mi aplicación iOS donde puedes cambiar el idioma en que debería aparecer la aplicación. Si alguien elige seleccionar un idioma manual, anulo los "AppleLanguages" standardUserDefaults como

NSString *language = [[[NSUserDefaults alloc] initWithSuiteName:kAppGroup] objectForKey:kManualLanguageKey];

 [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:language, nil] forKey:@"AppleLanguages"]; 

Ahora, cuando el usuario reinicia la aplicación (después de terminarla), la aplicación carga automáticamente las LocalizedStrings correctas.

Ahora aquí está mi problema:

A pesar de que esto resuelve mi problema de cambiar el idioma de la aplicación, no muestra numbers, etc. correctamente. Number / DateFormatter y localizedStringWithFormat dependen de [NSLocale currentLocale]. Sé que podría sobreescribir el lokale actual también.

 [[NSUserDefaults standardUserDefaults] setObject:language forKey:@"AppleLocale"]; 

pero luego no puedo get el idioma / región real seleccionado en la configuration del sistema una vez que el usuario decide deshabilitar el idioma manual. Podría almacenar el currentLocale dentro de mis propios Defensas de usuario antes de replacelo, pero luego, si el usuario decide (por la razón que sea) cambiar el idioma del sistema mientras el idioma manual en la aplicación está activo, no podré get este nuevo sistema seleccionado idioma.

¿Hay alguna forma de get el formatting correcto de Números y Fechas sin cambiar manualmente la propiedad del entorno local de NumberFormatter, etc.?

Ok, encontré una manera de restablecer la configuration actual después de que el usuario deshabilita el idioma manual en http://www.thetawelle.de/?p=3800

En main.m si el bool para el idioma manual es falso, restablecimiento del idioma actual como este:

  NSArray *keysToRemove = @[@"AppleLanguages",@"NSLanguages",@"AppleLocale"]; NSLog( @"RESETTING TO USE SYSTEM LOCALE" ); @try { for( NSString *currentKey in keysToRemove ) { if( [defaults objectForKey:currentKey] ) { [defaults removeObjectForKey:currentKey]; } } } @catch (NSException *exception) { // NOTHNG TO CATCH HERE } @finally { [defaults synchronize]; } 

después de eso, la configuration regional actual y el idioma vuelven al idioma y región seleccionados en la configuration del sistema.