2012-07-20 11 views
6

Quiero tener una opción en mi aplicación para cambiar el idioma de mi aplicación (solo el idioma de la aplicación no es todo el sistema), ¿podría darme algunas pistas?cambiar la configuración de idioma de la aplicación en iOS no en el dispositivo completo

Gracias de antemano,

que sé sobre la localización!

+0

supongo que este post es un buen punto de partida: http: // stackoverflow.com/questions/1669645/how-to-force-nslocalizedstring-to-use-a-specific-language –

+0

Creo que no puede cambiar solo el idioma de su aplicación sin el dispositivo. –

+0

@VineeshTP Puede cambiar las configuraciones de idioma para el dispositivo y el simulador mientras desarrolla. Eche un vistazo a mi respuesta. – Abizern

Respuesta

2

Puede hacerlo mediante el uso de indicadores de compilación personalizados que configure desde Xcode. De esta forma, puede ejecutar una aplicación bajo una localización en lugar de cambiar todas las configuraciones para el dispositivo.

escribí un post sobre ello en http://abizern.org/2012/03/18/simple-localisation-testing/

y hay un ejemplo de proyecto en Github que se puede utilizar para verlo en acción: https://github.com/Abizern/SimpleLocalisationTesting

+0

Tengo la misma pregunta, pero ¿cómo puedo encontrar esto? -AppleLanguages ​​soryy Soy nuevo en iOS –

+0

Es solo uno de los indicadores que puede pasar en tiempo de ejecución. – Abizern

+1

Gracias por los documentos. Pero a partir de esta documentación no está completamente claro cómo configurarlo para newbs – User16119012

1

He hecho una localización personalizada hecha por .plist llena de una variedad de diccionarios. De esta manera:

kYes 
    en = @"Yes" 
    ru = @"Да" 
kNo 
    en = @"No" 
    ru = @"Нет" 

En mi proyecto realicé una clase singleton para leer esta cadena. En las opciones, el usuario selecciona el idioma necesario (al principio, la aplicación selecciona el idioma del estado actual del sistema o establece el predeterminado). El idioma seleccionado debe guardarse en el archivo o en la configuración para usar en el próximo inicio. En singleton tengo +getStringWithKey:. Así que paso @ "kYes" y obtengo una cadena para la localización actual solo para la aplicación. Además, deberá agregar archivos de localización estándar para proyectar de todos modos, incluso vacíos, porque si no lo hace, no se mostrarán todos los idiomas que admite en iTunes.

1

En realidad estaba pensando en otra idea sobre cómo cambie el idioma en la interfaz de usuario de su aplicación, aunque lo obligue a 1. configurar todas las cadenas manualmente 2. proporcionar un método (notificación) que actualice todos los elementos de la interfaz de usuario cuando se modifique la configuración de idioma. La idea se basa en el mismo método que usa iOS para encontrar la versión localizada de una cadena. Por lo tanto, como requisito previo, debe proporcionar un paquete (por ejemplo, AppNameStrings.bundle) con una estructura de carpeta language_id.lproj, donde language_id es el designador de los idiomas que desea proporcionar. Puede crear dicho paquete creando un conjunto de configuraciones, abrirlo en Finder y eliminar el archivo root.plist. Luego necesita una función que pueda usar para leer de su paquete. Aquí hay 2 métodos que uso para leer cadenas localizadas. Ponga los métodos siguientes en el archivo de GlobalDefinitions.h

#ifdef __OBJC__ 
NSBundle *yourNameBundle(void); 
NSString *YourNameLocalized(NSString *stringToken, NSString *language); 
#endif 

y este código en su archivo GlobalDefinitions.m

NSBundle *yourNameBundle(void) { 
static NSBundle* bundle = nil; 
    if (!bundle) { 
    NSString* path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"YouNameBundle.bundle"]; 
    bundle = [NSBundle bundleWithPath:path]; 
    } 
    return bundle; 
} 
NSString *YourNameLocalized(NSString *stringToken, NSString *language) { 
    if (yourNameBundle()) { 
    return [yourBundle localizedStringForKey:stringToken value:@"" table:@"Root" language:language]; 
    } else { 
    return stringToken; 
    } 
} 

Tienes que crear una categoría en NSBundle para

[yourBundle localizedStringForKey:stringToken value:@"" table:@"Root" language:language] 

como el método estándar pierde el parámetro de idioma. En su método, abra el archivo language.lproj/Root.strings correspondiente y escanee para encontrar el stringToken. Si no puede encontrarlo, devuelva el token o la cadena de texto. Siempre que necesite una versión traducida de algún texto que escriba, p. Ej. label.text = YourNameLocalized (@ "Token", [self provideLanguageIdentifier); y has terminado. No lo he hecho hasta ahora, pero debería funcionar.

Cuestiones relacionadas