Runtime cambiar el idioma / localización en Three20

¿Es posible cambiar el idioma / localización Three20 en time de ejecución sin reiniciar la aplicación?

Actualmente, logré cambiar el idioma mediante la alteración del valor de AppleLanguages en el main.m

Hay un "truco" para eso. Puede cargar su propio NSBundle con el text localizado y usar ese NSBundle en su lugar. Tenga en count que si falta el file de idioma localizado, la aplicación no se ejecutará, así que asegúrese de establecer un idioma correcto.

Encima de su implementación de AppDelegate, agregue una statement de NSBundle personalizada:

 static NSBundle *bundle = nil; 

Y luego carga el idioma que desees en ese package:

 [[NSUserDefaults standardUserDefaults] setObject: [NSArray arrayWithObjects:@"he", nil] forKey:@"AppleLanguages"]; NSLocale* locale = TTCurrentLocale(); NSString *path = [[NSBundle mainBundle] pathForResource:[locale localeIdentifier] ofType:@"lproj" ]; bundle = [[NSBundle bundleWithPath:path] retain]; 

Agregará una function personalizada en su AppDelegate para get el text localizado también (en lugar de NSLocalizedString)

 /////////////////////////////////////////////////////////////////////////////////////////////////// + (NSString*)get:(NSString*)key { return [bundle localizedStringForKey:key value:nil table:nil]; } 

Para facilitar las cosas, puede agregar una function estática en el file pch:

 #import "AppDelegate.h" #define MyLocalizedString(key, alt) [AppDelegate get:key]