Localizar (traducir) aplicaciones en macOS (parte 1)
Nota: este artículo se refiere a programas realizados en Cocoa (forma nativa de programar en macOS empleando Objective-C) para Snow Leopard, utilizando como entorno de programación XCode Tools 3 de Apple (se puede conseguir gratuitamente desde Apple Developer Connection y desde el DVD de instalación de macOS).
Se emplea el término localización (to localize) para referirse a la traducción de una aplicación a diferentes idiomas. Por defecto, las aplicaciones para Mac se realizan en inglés que es el idioma base del sistema operativo (que como sabéis está traducido a múltiples idiomas).
Se puede localizar una aplicación de varias maneras pero hay conocimientos básicos generales que es recomendable anotar.
APLICACIONES EN MAC OS X
Los programas en macOS se presentan como archivos únicos aunque en realidad son carpetas de archivos con estructura básica común a todos ellos. Si se pulsa con el botón derecho del ratón sobre una aplicación aparece entre otros el menú “Mostrar contenido del paquete” que nos muestra el interior de la carpeta.
Suele haber una carpeta inicial Contents de cuyo interior nos interesa la carpeta Resources que es la que contiene los archivos de idioma.Hay una carpeta por cada idioma al que se ha traducido la aplicación, el nombre de esas carpetas consta de una primera parte con el nombre del idioma (puede ser el nombre completo en inglés como por ejemplo English o Spanish o abreviaturas estándar de 2 caracteres como En para inglés o Es para español o añadiendo la consideración regional como en Es_ES para español de España o en Es_AR para español de Argentina) seguido de “.lproj”.
En los ejemplos comentados los nombres de las carpetas de idioma serían:
- English.lproj / Spanish.lproj
- En.lproj / Es.lproj
- En.lproj / Es_ES.lproj / Es_AR.lproj.
Dentro de cada una de esas carpetas están los archivos que se han traducido (localizado) a cada idioma. De ellos nos interesan sobre todo Localizable.strings y MainMenu.nib o MainMenu.xib.
Nota: en macOS Tiger y Leopard las aplicaciones con carpetas de español llamadas Spanish.lproj o Es.lproj o Es_ES.lproj (Es_AR, Es_MX, etc.) arrancan bien en español al detectarlo como idioma base del sistema operativo, sin embargo Snow Leopard parece tener preferencia por Spanish.lproj como nombre de carpeta y en ocasiones las aplicaciones traducidas arrancan en inglés si la carpeta de español no se llama así (a pesar de que, en Snow Leopard, Apple propone la notación universal de 2 caracteres como referencia de país o regionalización).
ARCHIVOS DE TRADUCCIÓN
Los archivos con extensión .strings contienen equivalencias de cadenas de texto entre 2 idiomas. Por defecto suele haber un sólo archivo Localizable.strings en cada aplicación en el que están las cadenas en inglés. El archivo Localizable.strings inglés presenta un formato similar a éste:
"Load Settings…" = "Load Settings…";
"Save Settings…" = "Save Settings…";
"Preferences…" = "Preferences…";
Se trata de pares de cadenas equivalentes que por defecto aparecen ambas en inglés para que desarrollemos una traducción de la segunda parte de cada par de manera que se obtenga un archivo Localizable.strings localizado con este formato:
"Load Settings…" = "Cargar Configuración…";
"Save Settings…" = "Guardar Configuración…";
"Preferences…" = "Preferencias…";
El archivo Localizable.strings localizado estará en la carpeta correspondiente a su idioma para que macOS lo lea desde ahí y aplique el texto traducido donde detecta la presencia del texto original.Los archivos .strings se pueden leer desde cualquier editor de texto, han de tener codificación UTF8 y pueden tener comentarios incluidos entre los caracteres /* … */.
Traducir cadenas en el editor de texto básico puede ser muy laborioso, sobre todo en caso de archivos con varios cientos o miles de cadenas.No siempre tendremos el archivo .strings para nuestro idioma sino que tendremos que generarlo desde los archivos en inglés de la aplicación, por ello en este artículo se proponen varias formas de generar, traducir e integrar archivos .strings.
Es obligado que las cadenas de texto que pueden aparecer y ser utilizadas en un archivo Localizable.strings han de ser objetos de programación en Cocoa del tipo NSLocalizedString, si se trata de cadenas simples (objetos NSString) no funciona la traducción.
ARCHIVOS DE INTERFAZ DE USUARIO
Los archivos .nib o .xib son la interfaz del programa (ventanas, cuadros de texto, diálogos, botones…). Pueden ser modificados desde el programa Interface Builder (componente fundamental de XCode). En la fase de diseño se utilizan archivos .nib o .xib (éstos en versiones más recientes de XCode), en la aplicación compilada se utilizan solamente archivos .nib.
El que contiene la ventana principal y el menú principal del programa se llama MainMenu y como mínimo habrá uno correspondiente al idioma inglés. Para localizar (traducir) la interfaz del programa habrá que crear otro archivo MainMenu (.nib o .xib) en la carpeta del idioma en cuestión.
El archivo Localizable.strings contiene pares de cadenas de texto que estén presentes en los diferentes elementos de la interfaz de usuario y que sean del tipo NSLocalizedString. Cuando arranca la aplicación, macOS substituye el texto original en inglés por su equivalente en español con las condiciones ya comentadas de que sea del tipo NSLocalizedString y que esté presente en Localizable.strings.
Nota: los archivos.nib o .xib pueden estar compilados cuando forman parte de las aplicaciones (desde XCode se refiere a ellos como “flattened compiled NIB file” o “stripped NIB file”). Si la aplicación que deseas traducir viene con los archivos .nib compilados y no se te proporciona el código fuente no será posible su traducción ya que no podrás abrir esos archivos ni extraer cadenas desde ellos.
Esta sería una iniciación muy básica al tema que nos ocupa, a continuación iremos haciendo un ejercicio sencillo de traducción de un programa simple en inglés al castellano para comentar cada paso.