strings multi localizable language app iphone cocoa localization

iphone - multi - Cambiar el idioma de NSLocalizedString() en tiempo de ejecución



multi language ios app swift (4)

Tengo una aplicación de iPhone que tiene un botón para cambiar el idioma de visualización en tiempo de ejecución. He observado NSLocalizedString () que devolverá las cadenas apropiadas de acuerdo con las preferencias del sistema. ¿Cuáles son mis opciones en lugar de codificar todas las cadenas de visualización y regresar según la selección del idioma del usuario en tiempo de ejecución? Cualquier puntero será muy apreciado.


Use para establecer el orden de idioma por la fuerza

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en",@"de",..., nil] forKey:@"AppleLanguages"]; [[NSUserDefaults standardUserDefaults] synchronize];

luego usa

NSLocalizedString();

para mostrar una cadena localizada ...


La "experiencia de usuario" correcta es para que el usuario seleccione su idioma a través del panel de preferencias del sistema; no su aplicación (o el panel de configuraciones de su aplicación, etc.). No hay forma de anular esta aplicación por aplicación y no le gustaría que ninguna aplicación cambie la configuración de todo el sistema.



Basado en la publicación del usuario "object2.0", he creado un código de muestra que puede usar en su aplicación para cambiar el idioma de la interfaz de usuario sobre la marcha.

La principal clase de localización que hace el trabajo arduo:

-(NSString *) localized:(NSString *) key { GameInfo *gameInfo = [GameInfo sharedInstance]; // langCode should be set as a global variable somewhere NSString *path = [[NSBundle mainBundle] pathForResource:langCode ofType:@"lproj"]; NSBundle* languageBundle = [NSBundle bundleWithPath:path]; return [languageBundle localizedStringForKey:key value:@"" table:nil]; }

Suponiendo que tiene esta función en una clase global llamada utils, llame a esta función con el siguiente código (por ejemplo, para generar la palabra "Configuración").

NSLog( [utils localized:@"Settings"] );

Para cambiar el idioma:

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