2011-05-06 10 views
5

Estoy intentando cambiar el idioma de la aplicación, pero cuando ejecuto este código en el lenguaje main.h cambia después de cerrar una aplicación y volver a ejecutarla. ¿Es posible cambiar el idioma sin reiniciar?cambio de idioma solo después de reiniciar en iphone

int main(int argc, char *argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    NSArray *languages = [NSArray arrayWithObject:@"en_GB"]; 
    [[NSUserDefaults standardUserDefaults] setObject:languages forKey:@"AppleLanguages"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 
+0

Por favor, compruebe mi respuesta en el siguiente mensaje: http://stackoverflow.com/a/20257557/306764 –

Respuesta

3

Actualización de la respuesta "Cómo cambiar los idiomas dentro de la aplicación"

NSLocalizedString() (y sus variantes) acceder a los "AppleLanguages" llave en NSUserDefaults para determinar que la configuración del usuario para los idiomas preferidos son . Esto devuelve una serie de códigos de idioma, siendo el primero el establecido por el usuario para su teléfono y los subsiguientes utilizados como reservas si un recurso no está disponible en el idioma preferido.

Puede anular la configuración global para su propia aplicación si lo desea utilizando el método setObject: forKey: para establecer su propia lista de idiomas tal como lo hizo. Esto tendrá prioridad sobre el valor establecido globalmente y se devolverá a cualquier código de la aplicación que esté realizando la localización. El código para esta sería algo como:

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

Nota: Para estar en el lado seguro Asegúrese de que utiliza el nombre de idiomas predefinidos apropiado.

A continuación se muestra el fragmento de código, pero DEBE tener todos los archivos de localización en su proyecto.

@implementation LocalizeLanguage 

static NSBundle *bundle = nil; 

+(void)initialize { 
    NSUserDefaults* defs = [NSUserDefaults standardUserDefaults]; 
    NSArray* languages = [defs objectForKey:@"AppleLanguages"]; 
    NSString *current = [[languages objectAtIndex:0] retain]; 
    [self setLocalizeLanguage:current]; 
} 

/* 
    [LocalizeLanguage setLocalizeLanguage:@"en"]; 
    [LocalizeLanguage setLocalizeLanguage:@"fr"]; 
*/ 

+(void)setLocalizeLanguage:(NSString *)lang { 
    NSLog(@"preferredLang: %@", lang); 
    NSString *path = [[ NSBundle mainBundle ] pathForResource:lang ofType:@"lproj" ]; 
    bundle = [[NSBundle bundleWithPath:path] retain]; 
} 

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

@end 
+3

Ok, pero he hecho esto ya :) y todo funciona bien perfectlly. Quiero agregar la posibilidad de cambiar el idioma en la aplicación Settings.app, por lo que cuando el idioma actual del iPhone es inglés. pero el usuario estableció French i Settings.app para mi aplicación. Tengo que forzar a que mi aplicación se localice en francés. Estoy tratando de hacer eso usando el código que escribí antes y funciona, pero necesito reiniciar la aplicación después de eso y este es el problema que trato de resolver. – pawelini1

+0

He actualizado la respuesta, pero no es necesario hacer lo que desea hacer. iOS tiene soporte para la localización integrada en el sistema operativo: todo lo que necesita hacer es proporcionar los archivos de idioma adecuados y el usuario puede seleccionar el idioma que desea. Pero de todos modos esto funcionará para ti, ¡buena suerte! :) – Deminem

+1

¡Tengo exactamente el mismo problema! –

Cuestiones relacionadas