2012-01-03 11 views
5

Estoy trabajando en una aplicación con soporte multilingüe. Como se puede esperar, de vez en cuando me carga algunos archivos nib utilizando un código como este:Carga manual de una punta localizada diferente en iOs

self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:nil]; 

La aplicación va a continuación, cargar la versión xib localizada correspondiente de su carpeta languange. Ahora, me pregunto si es posible cargar el archivo de punta localizada manualmente. Por ejemplo, en lugar de simplemente cargando el CustomController, cargando la Inglés/francés/alemán/etc. versión de la CustomController.

¿Hay alguna manera de lograrlo?

¡Gracias por su ayuda con anticipación!

P.S. Sé que esto puede no ser la forma adecuada para cambiar los idiomas en una aplicación para iPhone/iPad, pero esto no es mi decisión

[más tarde editar] Esto parece un poco raro y como un truco, pero parece trabajo (carga de la punta alemán):

NSString* path= [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"]; 
NSBundle* languageBundle = [NSBundle bundleWithPath:path]; 
self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:languageBundle]; 

me encontré con la punta aquí: http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html

no se siente completamente en lo cierto, sin embargo, me pregunto si hay otras soluciones también. Para empezar, tengo la sensación de que esto causará problemas con las versiones anteriores de iOs, ya que la carpeta de idioma tenía una convención de nombres diferente

+1

Compruebe si esto puede ayudarlo: http://stackoverflow.com/questions/598020/objective-c-cocoa-internationalization-with-nibs-is-that-really-a-good-idea – Peres

+0

Hace, Pero no en este caso. Tengo algunas ideas sobre cómo lograr tal efecto sin usar plumillas localizadas. Desafortunadamente, la aplicación los usa ahora mismo y la idea es hacer esto lo antes posible, sin tener que volver a escribir mucho o replantear la aplicación. Si pudiera cargar manualmente los xibs localizados, sería realmente fácil convertirlo – BBog

+0

¿Pero estamos hablando de hacerlo sobre la marcha?Por ejemplo, tengo las puntas para inglés UK, y luego voy a la configuración y cambio el idioma a frensh y simplemente cambiará ?? – Peres

Respuesta

17

Así que, como dije en la edición, esto es lo que encontré como solución:

NSString* path= [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"]; 

NSBundle* languageBundle = [NSBundle bundleWithPath:path]; 

self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:languageBundle]; 

Y si tiene que cargar un texto en una etiqueta localizada

NSString* path= [[NSBundle mainBundle] pathForResource:[[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"] objectAtIndex:0] ofType:@"lproj"]; 

NSBundle* languageBundle = [NSBundle bundleWithPath:path]; 

someLabel.text = [languageBundle localizedStringForKey:@"textKey" value:@"" table:nil];  

Más información aquí: http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html

A quien corresponda, este método plantea bastantes problemas. Para empezar, algo que podría afectar a todos: es necesario que todos los recursos utilizados por un xib localizado también estén localizados. Si cargo un nuevo xib localizado usando este método, y ese xib contiene una imagen regular no localizada, no se mostrará hasta que esté localizado. Los otros problemas son más particulares y están relacionados con la forma de recuperar los datos localizados.

Al final, no creo que vaya a usar esto, porque para la aplicación actual es demasiado problemático, pero podría ser útil en el futuro.

Cuestiones relacionadas