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.
supongo que este post es un buen punto de partida: http: // stackoverflow.com/questions/1669645/how-to-force-nslocalizedstring-to-use-a-specific-language –
Creo que no puede cambiar solo el idioma de su aplicación sin el dispositivo. –
@VineeshTP Puede cambiar las configuraciones de idioma para el dispositivo y el simulador mientras desarrolla. Eche un vistazo a mi respuesta. – Abizern