2011-05-27 16 views
25

Escribo una aplicación para iOS, donde deseo que el usuario pueda cambiar el idioma de la interfaz de usuario independientemente del idioma del iPhone o del iPad. La pregunta es, ¿cómo recargo el archivo NIB apropiado para la vista que se muestra actualmente cuando cambia el idioma y cómo cargo el archivo .strings apropiado para que NSLocalizedString funcione correctamente?Cambiar el idioma de la aplicación iOS sobre la marcha

+5

Usted sabe que las personas pueden cambiar el idioma en la aplicación de Configuración y su aplicación ** no ** debe tener una opción separada para esto, ¿no? –

+0

Es posible que necesite una opción separada para esto, si desea que un determinado idioma sea el idioma de respaldo, ese no es el mismo idioma que la primera localización existente en la lista de idiomas de los usuarios. Este es un patrón muy común. – brainray

Respuesta

27

Esto debería ser el truco, suponiendo que de es el nuevo idioma seleccionado por el usuario. También asegúrate de que estás reiniciando la vista actual.

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

Gracias por su respuesta rápida. ¿Pero eso no cambia el idioma de todo el teléfono? – tommazzo

+0

No, no puede cambiar la configuración del teléfono del código (al menos el código "aprobado"). – sorin

+1

Aquí hay una lista de todas las representaciones de los nombres de idiomas: http://www.loc.gov/standards/iso639-2/php/English_list.php – KKendall

4

Personalmente, no me gusta la idea de dar archivos NIB a los traductores. En cambio, diseño los NIB para que haya suficiente espacio para los idiomas que no están en inglés (generalmente requerirán un 50% más de espacio para el texto), y luego almaceno todos los recursos de texto en archivos Localizable.strings.

Luego, en mi código establezco el texto para cada control de UI.

[_myButton setTitle:NSLocalizedString(@"My button title", 
             @"My description for translation file, e.g. including chars limit") 
      forState:UIControlStateNormal]; 

Me parece que esto hace que el proceso de traducción sea más fácil de administrar.

Para responder a su pregunta original, pondría este código en la función viewWillAppear de su para asegurarse de que se vuelva a cargar cada vez que vuelva a aparecer la IU.

+0

Acabo de localizar mi aplicación y tengo que estar de acuerdo con lo que estás diciendo. +1. – Moshe

+0

Gracias, esta es definitivamente una manera de hacerlo. Discutiré este cambio de idioma de nuevo con mis clientes. Una alternativa, el uso de los archivos NIB para la localización es preguntar al usuario si desea reiniciar la aplicación, una vez que se detecta un cambio en la configuración del idioma. – tommazzo

Cuestiones relacionadas