domingo, 4 de marzo de 2012

Localización de nib files en iOS


Seguramente, para buscar un mayor éxito de vuestra aplicación, llegaré el momento en que necesitéis traducirla a otros idiomas. Este proceso es lo que se denomina localización.

Para realizar la localización de los ficheros nib, en  los que se incluyen los storyboards, si utilizas Xcode 4.2 o posterior, Apple nos proporciona el comando de línea ibtool. 

Supongamos que queremos crear un fichero strings de localización para nuestro storyboard. Por defecto estará en la carpeta en.lproj, supuestamente en inglés. Desde el terminal nos situaremos en el directorio de en.lproj de la aplicación y ejecutaremos el comando:

ibtool --generate-strings-file storyboard.strings MainStoryboard.storyboard

De esta forma nos va a generar un archivo strings con nombre storyboard a partir de nuestro storyboard llamado MainStoryBoard con el siguiente aspecto:

/* Class = "IBUITableViewController"; title = "Master"; ObjectID = "12"; */
"12.title" = "Hello";
/* Class = "IBUINavigationItem"; title = "Vehicles"; ObjectID = "36"; */
"36.title" = "Car";
/* Class = "IBUILabel"; text = "Distance"; ObjectID = "0mA-rX-5ud"; */
"0mA-rX-5ud.text" = "Distance";

La parte izquierda del igual es la clave identificativa del texto y la derecha es el texto que aparece en el interfaz. 
Este fichero será el que habrá que traducir al resto de idiomas que tengamos en nuestra app y se dejará en su directorio correspondiente. Por ejemplo en español sería algo así:

/* Class = "IBUITableViewController"; title = "Master"; ObjectID = "12"; */
"12.title" = "Hola";
/* Class = "IBUINavigationItem"; title = "Vehicles"; ObjectID = "36"; */
"36.title" = "Coche";
/* Class = "IBUILabel"; text = "Distance"; ObjectID = "0mA-rX-5ud"; */
"0mA-rX-5ud.text" = "Distancia";

Y se dejará en el directorio es.lproj.

A partir del fichero generado para crear el storyboard en español se utiliza el siguiente comando:

ibtool --strings-file es.lproj/storyboard.strings --write es.lproj/MainStoryboard.storyboard en.lproj/MainStoryboard.storyboard

De esta forma, basándose en los strings traducidos que teníamos en es.lproj/storyboard.strings se ha generado un es.lproj/MainStoryboard.storyboard en español, a partir del que teníamos en ingles en en.lproj/MainStoryboard.storyboard.

Por último debéis añadir el nuevo storyboard a vuestro proyecto.

Hay que tener en cuenta que la labor de localización no acaba aquí. La longitud de los strings habrá variado, con lo que puede que haya que hacer ajustes en las vistas, botones, etc.

Además, los formatos de fechas, números, etc. no son los mismos en los diferentes idiomas. Para realizar la localización de ese tipo de cosas, tenemos la clase NSLocale, pero eso lo veremos en otra ocasión.

No hay comentarios:

Publicar un comentario