Actualización de la respuesta "Cómo cambiar los idiomas dentro de la aplicación"
NSLocalizedString()
(y sus variantes) acceder a los "AppleLanguages" llave en NSUserDefaults para determinar que la configuración del usuario para los idiomas preferidos son . Esto devuelve una serie de códigos de idioma, siendo el primero el establecido por el usuario para su teléfono y los subsiguientes utilizados como reservas si un recurso no está disponible en el idioma preferido.
Puede anular la configuración global para su propia aplicación si lo desea utilizando el método setObject: forKey: para establecer su propia lista de idiomas tal como lo hizo. Esto tendrá prioridad sobre el valor establecido globalmente y se devolverá a cualquier código de la aplicación que esté realizando la localización. El código para esta sería algo como:
[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"de", @"en", @"fr", nil] forKey:@"AppleLanguages"];
Nota: Para estar en el lado seguro Asegúrese de que utiliza el nombre de idiomas predefinidos apropiado.
A continuación se muestra el fragmento de código, pero DEBE tener todos los archivos de localización en su proyecto.
@implementation LocalizeLanguage
static NSBundle *bundle = nil;
+(void)initialize {
NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* languages = [defs objectForKey:@"AppleLanguages"];
NSString *current = [[languages objectAtIndex:0] retain];
[self setLocalizeLanguage:current];
}
/*
[LocalizeLanguage setLocalizeLanguage:@"en"];
[LocalizeLanguage setLocalizeLanguage:@"fr"];
*/
+(void)setLocalizeLanguage:(NSString *)lang {
NSLog(@"preferredLang: %@", lang);
NSString *path = [[ NSBundle mainBundle ] pathForResource:lang ofType:@"lproj" ];
bundle = [[NSBundle bundleWithPath:path] retain];
}
+(NSString *)get:(NSString *)key alter:(NSString *)alternate {
return [bundle localizedStringForKey:key value:alternate table:nil];
}
@end
Por favor, compruebe mi respuesta en el siguiente mensaje: http://stackoverflow.com/a/20257557/306764 –