Todos los recursos de cadenas localizadas (más muchos otros tipos de recursos) se extraen del paquete. Por lo general, una aplicación utiliza el "paquete principal", que es el creado por XCode junto con su aplicación. Pero puede crear por separado cualquier otro paquete, siempre que lo haga con la estructura correcta, luego puede descargarlo en su aplicación y finalmente extraer una cadena localizada utilizando la función NSLocalizedStringFromTableInBundle().
Así que digamos que usted extrae de la traducción en la lengua "CLAVE" clave, la sintaxis normal sería:
NSString *translated = NSLocalizedStringFromTable(@"key",nil,nil);
pero hay una variante de esta opción que le permite especificar el paquete:
NSString *translated = NSLocalizedStringFromTableInBundle(@"key",nil,myBundle,nil);
en el caso estándar se reemplaza con myBundle
[NSBundle mainBundle]
pero si desea utilizar otro paquete puede especificar que de esta manera:
NSString *myBundlePath = "the path to the downloaded bundle";
NSBundle *myBundle = [NSBundle bundleWithPath:myBundlePath];
NSString *translated = NSLocalizedStringFromTableInBundle(@"key",nil,myBundle,nil);
La estructura completa de un paquete se puede ver en la "Guía de programación del paquete" en la documentación de Apple, pero en su caso, usted puede simplemente crear de esta manera:
- en su Mac crear un directorio, y llámalo "MyBundle"
- dentro de este directorio mueve tus cadenas localizadas (si tienes varios idiomas en el paquete, entonces el archivo localizable.strings estará dentro de los directorios de lproj: en.lproj, it.lproj, fr .lproj, ...)
- a continuación, cambie el nombre del directorio a "MyBundle.bundle"
Notarás con la última operación que ahora este objeto se ve como un objeto independiente, pero de hecho es un directorio.
Ahora puede decidir tener un enfoque de paquetes múltiples o seguir una técnica de paquete único: en este último caso puede empaquetar todos los idiomas y luego usar el paquete único actualizado para la traducción de idiomas utilizando las reglas de localización automática del sistema ; en el otro caso, puede hacer un paquete para cada idioma y luego, en función del idioma seleccionado actualmente, cargar el paquete apropiado y elegirlo para sus traducciones.
¿La misma pregunta que http://stackoverflow.com/questions/12358379/is-it-possible-to-access-the-app-bundles-en-lproj? –
La pregunta parece haber sido respondida [aquí] (http://stackoverflow.com/a/6075533/1651167) – Shelm
Es similar pero las personas responden preguntas diferentes según cómo se soliciten. Obviamente, esta es la mejor respuesta a continuación. – mskw