2009-06-05 53 views
7

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.Cambiar el idioma de NSLocalizedString() en tiempo de ejecución

+0

Ver http://stackoverflow.com/question s/1669645/how-to-force-nslocalizedstring-to-use-a-specific-language – Elliot

Respuesta

1

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.

+5

No estoy de acuerdo. Para el juego de televisión, prefiero el japonés porque juego japonés desde la infancia. Pero me gusta usar mi idioma materno para otras aplicaciones. – AechoLiu

+0

Es posible que nuestra aplicación no admita la preferencia del sistema en varios países donde se introdujo, por lo que suponer que EN con DE sería una gran ventaja para muchos clientes que tienen otro segundo idioma que el predeterminado = EN. –

+0

Esto supone que la aplicación no muestra varios idiomas a la vez. –

5

usa para programar orden de los idiomas por la fuerza

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

a continuación, utilizar

NSLocalizedString(); 

para mostrar cadena localizada ...

15

Basado en el cargo por el usuario "object2.0", he elaborado un código de ejemplo puede usarlo en su aplicación para cambiar el idioma de la IU sobre la marcha.

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

-(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]; 
} 

Asumiendo que tiene esta función en una clase global llamado utils, llamar a esta función con el siguiente código (por ejemplo, a la salida de la palabra "Configuración" .

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

Para cambiar el idioma:

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

buen resumen :) Por cierto, podemos obtener langCode de NSUserDefaults también, si guardamos el idioma seleccionado en los NSUserDefaults después de que el usuario cambia el idioma sobre la marcha. (no sé si esta operación es costosa) – aslisabanci

+0

@CheckSmith por qué "ofType: @" lproj "?? A menudo creo Localizable.strings – onmyway133

Cuestiones relacionadas