TRABAJO DE FIN DE MÁSTER Guía práctica de localización de apps: el papel de los lenguajes de programación Autora: Esperanza Pérez Íñiguez Tutora: Dra. Cristina A. Huertas Abril Índice Índice de figuras................................................................................................................ 2 Índice de tablas ................................................................................................................. 2 1. Introducción .................................................................................................................. 3 2. Metodología y objetivos ............................................................................................... 7 3. Estado de la cuestión..................................................................................................... 9 3.1 La localización de software y apps ....................................................................... 10 3.1.1 Evolución histórica ......................................................................................... 10 3.1.2 Importancia de la localización en la actualidad: GILT .................................. 11 3.1.3 Principales herramientas para la localización de software y apps ................. 15 3.2 Lenguajes de programación y localización ........................................................... 15 3.2.1 Características principales .............................................................................. 15 3.2.2 Comparación de sistemas operativos.............................................................. 20 3.2.3 Implicación en la creación de apps ................................................................ 21 3.3 El proceso de localización de una app .................................................................. 25 3.3.1 iOS: .strings y .xliff ........................................................................................ 25 3.3.2 Android: .xml ................................................................................................. 29 3.3.3 Blackberry: .ts................................................................................................. 32 3.3.4 Windows 10 Mobile: .resx ............................................................................. 33 4. Aplicación práctica ..................................................................................................... 37 4.1 Búsqueda y descarga de la aplicación ................................................................... 37 4.2 Descompilación ..................................................................................................... 38 4.3 Creación de la carpeta values y gestión de archivos traducibles .......................... 43 4.4 Traducción de archivos .xml traducibles .............................................................. 44 4.5 Compilación .......................................................................................................... 47 4.6 Firma de la aplicación ........................................................................................... 49 4.7 Testeo .................................................................................................................... 51 5. Conclusiones ............................................................................................................... 54 6. Bibliografía ................................................................................................................. 55 1 Índice de figuras Fig. 1. Captura de la app Facturas .................................................................................. 22 Fig. 2. Fragmento de código con variables de una app en inglés y en español. ............. 22 Fig. 3. Captura de pantalla de la app Facebook. ............................................................. 23 Fig. 4. Captura de pantalla de información sobre Android 6.0.1 en alemán. ................. 24 Fig. 5. Captura de página web de la tienda Google Play para apps de Android. ........... 38 Fig. 6. Ruta para descompilar un archivo .apk. .............................................................. 39 Fig. 7. Búsqueda del archivo .apk que se desea descompilar. ........................................ 40 Fig. 8. Ventana emergente con información sobre la descompilación. .......................... 41 Fig. 9. Proceso de descompilación en curso. .................................................................. 42 Fig. 10. Proceso de descompilación realizado correctamente. ....................................... 43 Fig. 11. Estructura de la carpeta values de una app de Android..................................... 44 Fig. 12. Vista de archivo xml desde SDL Trados 2015. ................................................. 45 Fig. 13. Vista de archivo strings.xml desde Notepad++. ................................................ 46 Fig. 14. Vista de archivo arrays.xml desde Notepad++. ................................................ 47 Fig. 15. Ruta para compilar la aplicación. ...................................................................... 48 Fig. 16. Ubicación del archivo YML. ............................................................................. 49 Fig. 17. Selección de la ruta del JDK. ............................................................................ 50 Fig. 18. Interfaz del emulador BlueStacks con indicación del icono Instalar apk. ......... 52 Índice de tablas Tabla 1. Comparación de las características de los SO .................................................. 20 2 1. Introducción La llegada de los teléfonos inteligentes (smartphones) a nuestras vidas ha supuesto un cambio radical en nuestra forma de interactuar con el mundo. Aunque el uso inicial y principal de los teléfonos era comunicarse con otras personas mediante llamadas de voz, en la actualidad estos dispositivos proporcionan muchísimas más funciones que facilitan y simplifican muchas de nuestras actividades cotidianas, convirtiéndose en uno de los dispositivos más versátiles que existen. Todas estas funciones se encuentran disponibles a través de aplicaciones móviles y la mayoría de ellas funcionan con acceso a Internet. Con las aplicaciones de hoy en día podemos utilizar nuestro dispositivo móvil para guardar contactos, anotar cosas, jugar a videojuegos, conocer gente, buscar sitios en un mapa, leer libros, comprar y vender artículos, navegar por Internet, hacer fotos, realizar pagos, etc. Los primeros teléfonos inteligentes contaban con aplicaciones que brindaban las funciones de correo electrónico, navegación web, reloj mundial, un teclado QWERTY físico, modo avión, puerto infrarrojo, conexión a PC, etc. Más adelante se añadieron las pantallas táctiles y sistemas operativos que permitían añadir aplicaciones desarrolladas por terceros. En este sentido, el primero en lanzar un teléfono con sistema operativo propio que permitiera añadir aplicaciones fue Apple con el iPhone y el sistema operativo iOS en 2007. Con la aparición de Internet y la evolución de estos teléfonos, se ha eliminado la barrera geográfica y ahora podemos comunicarnos e interactuar con personas en cualquier momento sin importar en qué lugar del mundo se encuentren. Esta capacidad de comunicación e interacción a nivel mundial ha permitido que las empresas remodelen sus estrategias de mercado y puedan anunciar y vender sus productos por todo el mundo aprovechando las ventajas que ofrecen estas aplicaciones: las empresas pueden realizar transacciones on-line mediante tiendas en línea, ofrecer cursos de formación, vender videojuegos, alquilar películas… No cabe duda de que esto abre una infinidad de posibilidades. Toda esta corriente de globalización obliga, como consecuencia, a pensar en la traducción y la adaptación de los productos a otras lenguas y culturas para mantener el atractivo del producto en cada país y facilitar su comercialización y uso. Por este motivo 3 se creó el modelo GILT (acrónimo de Globalización, Internacionalización, Localización y Traducción), que busca la creación de unos estándares que permitan que el producto sea lo más neutro posible para permitir y facilitar su adaptación a los diferentes mercados y culturas (véase el apartado 2.1.2 para obtener más información sobre el modelo GILT). Este modelo se lleva a cabo en la localización de software, de la que sería subyacente la localización de apps, pues comparten las mismas particularidades (por ejemplo, formatos o extensiones de los archivos en los que se encuentra el texto traducible) y entraña las mismas dificultades de localización y traducción, como la limitación de espacio, uso de elementos funcionales (por ejemplo, variables y comandos de control), falta de contexto... No obstante, cuenta con algunas diferencias que nos obligan a separar ambas modalidades de localización. Estas diferencias derivan de los sistemas operativos que soportan estas aplicaciones y las plataformas en las que se ejecutan. A continuación, enumeramos las diferencias entre ambas modalidades de localización. En la localización de software se traducen y localizan los siguientes elementos: la interfaz, la documentación y el material de ayuda relativos al software. Por otra parte, en la localización de aplicaciones móviles (apps), se traducen y localizan la interfaz, los metadatos (nombre de la aplicación, descripción y palabras clave), el material comercial de la aplicación y el material de ayuda. En la localización de software se utiliza un registro de lenguaje formal, mientras que en la localización de aplicaciones móviles (aunque depende del tipo de app) predomina un registro de lenguaje informal y, en ocasiones, coloquial. En la localización de software nos encontramos atajos de teclado y aceleradores que debemos adaptar a nuestra lengua, mientras que en las aplicaciones móviles no existen, ya que estas se ejecutan en plataformas con pantalla táctil que suponen una mayor rapidez. 4 En la localización de software, el volumen de palabras será mucho mayor que en la localización de aplicaciones móviles, pues las plataformas en las que se ejecutan los programas de software permiten que quepa más texto. Además, estos últimos cuentan con manuales o guías de uso, que suelen ser bastante exhaustivos y tener un gran número de páginas, mientras que los manuales no son habituales en el caso de las apps. En la localización de software existe una limitación de espacio o caracteres salvable mediante el redimensionamiento de los elementos gráficos (cuadros de diálogo, menús, botones), ya que la plataforma en la que se ejecutan los programas tiene un tamaño mayor al de las plataformas móviles. En cambio, la limitación de espacio o caracteres no siempre será salvable en las aplicaciones móviles debido al tamaño de las plataformas móviles. En las aplicaciones móviles existe un mayor apoyo visual (uso de iconos, imágenes) debido a la limitación de espacio que mencionábamos antes, por lo que el localizador de apps debe prestar atención a los iconos e imágenes que aparezcan, evaluar su validez en la cultura meta (y modificarlos si es necesario) y ser lo más conciso posible en los términos que acompañen estos elementos gráficos, ya que cuentan con ese apoyo. Con todo esto, hemos de tener en cuenta también que la evolución en el desarrollo de las aplicaciones móviles y su proceso de localización avanza de forma vertiginosa y las fórmulas o métodos que se utilizan actualmente para desarrollar y localizar aplicaciones pueden cambiar drásticamente en cuestión de meses. Recientemente, se ha observado una creciente tendencia a utilizar lenguajes distintos a los tradicionales al desarrollar aplicaciones, lo que ha dado lugar a que algunos lenguajes caigan en el desuso o se utilicen en conjunción con otros. De hecho, el lenguaje que goza actualmente de más atención por parte de los desarrolladores y las empresas debido a su versatilidad y facilidad de uso es el XML en inglés «Extensible Markup Language», un lenguaje metalenguaje extensible de etiquetas desarrollado por 5 el World Wide Web Consortium que permite definir la gramática de lenguajes específicos y se considera un estándar para compartir datos en la Web. Cada vez con más frecuencia, los desarrolladores utilizan este lenguaje para desarrollar ciertas partes de la estructura de la aplicación, además de ser el formato de los archivos que contienen el texto traducible en los sistemas operativos Android, BlackBerry y Windows 10 Mobile. Pensamos que este trabajo puede ser de interés, pues ofrece un acercamiento gradual a las aplicaciones móviles, su estructura y su proceso de localización. De esta forma, un traductor sin experiencia en este ámbito puede obtener una visión general y, posteriormente, más específica de todo lo que conlleva este proceso, para aprenderlo y practicarlo paso por paso. Por último, no hemos de olvidar que también podría incluirlo entre sus servicios profesionales si lo desea, ampliando así su versatilidad. Con este fin en mente, en este trabajo abordamos los diferentes sistemas operativos para dispositivos móviles que existen, las características que tienen y los desafíos y dificultades que entrañan a la hora de localizar aplicaciones compatibles con ellos. 6 2. Metodología y objetivos El objeto de estudio de este trabajo consiste en analizar el papel de los lenguajes de programación en la localización de las aplicaciones para dispositivos móviles o apps, un campo fundamental en el desarrollo tecnológico actual. Así, y con la intención de explicar de la forma más clara posible el proceso de localización de una aplicación móvil, hacemos una introducción al mundo de las aplicaciones móviles y el fenómeno de la globalización. Esto nos permitirá explicar en qué estado se encuentra la investigación en este ámbito y qué trabajos se han realizado hasta este momento que traten sobre este tema o temas relacionados. Seguidamente, definimos conceptos clave en el ámbito de la localización y explicamos detalladamente las características de cada sistema operativo y las dificultades y retos que presentan en el proceso de localización. Todo lo anterior nos permite explicar paso a paso el proceso para localizar una app determinada en el entorno de Android, sistema operativo elegido para este trabajo. Así, el objetivo principal de este trabajo es elaborar un manual que pueda servir de guía o tutorial para la localización de aplicaciones móviles en los sistemas operativos de uso más extendido. - Proporcionar una visión general de los sistemas operativos más utilizados actualmente en dispositivos móviles, sus lenguajes y entornos de programación, los tipos de archivos y las extensiones de las aplicaciones y el modo de abordar su localización. - Dar a conocer las dificultades y los retos de la internacionalización y la localización desde el punto de vista del traductor-localizador. - Explicar de la forma más fácil y clara posible el proceso de tratamiento y localización de una aplicación móvil mediante un tutorial paso por paso con capturas de pantalla. - Ofrecer información actualizada sobre el uso de los lenguajes de programación en el desarrollo de aplicaciones móviles, los cambios que se están produciendo en el proceso de desarrollo y de localización y las nuevas 7 estrategias que se van proponiendo para facilitar y automatizar los procesos de forma que se reduzcan los costes y el tiempo. 8 3. Estado de la cuestión La localización de software y aplicaciones móviles es un tema que está muy presente hoy en día en el sector de la Ingeniería Informática, así como en el sector de la Traducción. Por ello, no ha sido difícil encontrar trabajos que traten diferentes aspectos de este ámbito. No obstante, hasta el momento no existe ninguno en el que se hable concretamente del papel de los lenguajes de programación en la localización de aplicaciones móviles. Desde el punto de vista del traductor-localizador, se han categorizado los aspectos lingüísticos, culturales y funcionales de la localización del inglés al español de aplicaciones (Seghiri, 2013); se ha hablado de las estrategias de cooperación con los desarrolladores para la localización de aplicaciones (Lachat, 2015), en las que se presentan fórmulas en las etapas de diseño, internacionalización, elección de iconos e imágenes y presentación del texto para facilitar la labor de localización; también se ha tratado la gestión multilingüe de aplicaciones mediante plataformas de traducción en línea (Jimenez, 2015), los problemas de localización que derivan de productos informáticos mal internacionalizados (Bernaola, Morales y Payros, 2014) y la adaptación de los aspectos culturales en la localización de productos multimedia (Tercedor, 2005). Desde el punto de vista del desarrollador, se han abordado los problemas de internacionalización en el sistema operativo Symbian y el lento avance del desarrollo de la internacionalización en plataformas móviles con respecto a lenguas con alfabetos diferentes al latino, se han descrito las características y dificultades de estos caracteres y se han propuesto soluciones para mejorar la situación en el sistema operativo Symbian, que ya se encuentra obsoleto. Por otro lado, se ha tratado el tema del testeo de las aplicaciones móviles, los costes que supone esta etapa por falta de automatización del proceso, las deficiencias que acarrean los emuladores de aplicaciones existentes (que no simulan sensores, GPS o conectividad) y la necesidad de automatizar el proceso (Muccini, Di Francesco y Esposito, 2014). Por último, nos encontramos con la obra Localizing Apps: A Practical Guide for Translators and Translation Students (Roturier, 2015), que es la que trata en mayor profundidad la localización de apps, tanto desde el punto de vista del traductor como del 9 localizador. El autor habla sobre conceptos de software, lenguajes de programación, codificación, archivos, expresiones regulares, problemas y soluciones de internacionalización, retos ante la falta de internacionalización, el proceso de localización (básica y avanzada) y el proceso de traducción. No obstante, no se centra en la localización de aplicaciones móviles, sino que se enfoca en la localización de software y decide ahondar en el lenguaje de programación Python, que apenas ejerce influencia en la localización de apps para dispositivos móviles. Tampoco ofrece ningún tipo de tutorial paso a paso ni se apoya en recursos visuales (imágenes o capturas de pantalla) para facilitar la comprensión de algunos conceptos o procedimientos que describe. 3.1 La localización de software y apps 3.1.1 Evolución histórica La aparición de las primeras aplicaciones móviles se remonta a finales de los años 90 (UPSA, 2013), y consistían en agenda, contactos, tonos de llamada, juegos y correo electrónico. Más adelante, gracias a la tecnología EDGE (acrónimo en inglés para tasas de Datos Mejoradas para la Evolución del GSM) y su conexión a Internet, se permite un mayor desarrollo de las aplicaciones ya existentes, pero se encuentran restringidas a sus propios sistemas operativos por los fabricantes, sin permitir desarrolladores externos. La auténtica revolución surge en 2007 a raíz del lanzamiento del iPhone de Apple, que ofreció su teléfono como plataforma para aplicaciones creadas por desarrolladores y compañías externas que se publicaban en su App Store. Poco después, Google presentó el sistema operativo Android OS con su Play Store y cambiaron las interfaces de Windows Phone OS, BlackBerry OS y Symbian OS para permitir la misma capacidad de admisión y uso de aplicaciones externas. En este contexto, hemos de señalar que una aplicación móvil (app), tal y como la conocemos hoy en día, se define como un pequeño programa desarrollado para su uso en un dispositivo móvil, como un teléfono inteligente, una tableta o un reproductor MP3, que se puede descargar de Internet (en muchos casos mediante tiendas en línea) e 10 instalarse en un dispositivo compatible. Una característica de las aplicaciones móviles es que tienen que desarrollarse específicamente para un sistema operativo, ya que cada uno tiene una estructura diferente y es compatible con unos lenguajes de programación determinados. Así, la transferencia de una aplicación móvil de un sistema operativo a otro supone el rediseño y desarrollo íntegro de la aplicación con los lenguajes de programación de ese sistema operativo. Existe una amplia variedad de sistemas operativos para dispositivos móviles, entre los que destacan iOS de Apple, Android de Google, BlackBerry de RIM y Windows 10 Mobile de Microsoft, que ha condenado a la obsolescencia a Windows Phone y Symbian (de Nokia), aunque este último fue desbancado ya en 2012 con el lanzamiento de Windows 8. Los sistemas operativos móviles más utilizados actualmente (o con mejores previsiones de futuro) son iOS y Android, con más de dos millones de aplicaciones disponibles en sus respectivas tiendas: Apple Store (Wayerless, 2016) y Google Play (Statista, 2016). No obstante, están apareciendo otros sistemas operativos que ofrecen nuevas posibilidades, como Maru OS, una ROM basada en Android 5.1 Lollipop. Este sistema operativo, cuando detecta que el dispositivo está conectado a una pantalla externa, ejecuta un sistema operativo basado en Debian con GNOME que convierte el teléfono inteligente en un ordenador convencional en el que se pueden instalar y ejecutar programas como lo haríamos en un ordenador con sistema operativo Linux (El Androide Libre, 2016). 3.1.2 Importancia de la localización en la actualidad: GILT Las aplicaciones informáticas para dispositivos móviles (generalmente conocidas como apps) han entrado en nuestra vida hace relativamente poco, y han supuesto un cambio radical de paradigma en nuestra forma de ver el mundo y de interactuar con nuestro entorno. A medida que avanzan las tecnologías de la información, también crece la necesidad de internacionalización, que consiste en adaptar los productos a cada mercado local para poder ofrecerlos a nivel global. Por este motivo, la localización tiene tanta demanda y ha cobrado, por ende, tanta importancia. 11 A raíz de esto, muchos profesionales del sector de la traducción han encontrado un nuevo nicho de mercado. Por ello, actualmente en la mayoría de las universidades en las que se imparten estudios de Traducción existen asignaturas dedicadas a la localización en alguna de sus modalidades (software, sitios web, videojuegos, imágenes y apps) y proliferan posgrados y cursos de formación dedicados a ella. La LISA (siglas de Localization Industry Standards Association: Asociación para la Normalización del Sector de la Localización) ideó el modelo GILT (acrónimo de Globalización, Internacionalización, Localización y Traducción), que se define como la «tendencia hacia un único mercado mundial, productos descontextualizados, estandarizados y de lenguaje controlado (que favorece la traducción automática) para su generalización, localización de un software a distintos idiomas para su implantación masiva, y traducción adaptada al mercado nacional del usuario de destino» (Martínez, 2004). A continuación, vamos a explicar en qué consiste cada uno de los procesos que forman el acrónimo GILT basándonos en las definiciones que ofrece la LISA (2010): La globalización, abreviada como «g11n», desde el punto de vista de la localización, es el proceso de comercialización y marketing de un producto o empresa a nivel mundial. Aunque el inglés se alza como lengua franca, la lengua de la comunicación internacionalmente, muchísimas encuestas y estudios afirman que la forma más efectiva de vender un producto y alcanzar la mejor experiencia de usuario es ofrecer los productos adaptados a la lengua y la cultura de cada lugar en el que se desea comercializar. Por este motivo se crea el modelo GILT, en el que podría considerarse que la globalización abarca los otros tres procesos que conforman el acrónimo. No obstante, esta no supone ningún proceso por parte del localizador, sino que es la razón por la que se localizan los productos y solo constituye el punto de partida o la base. Otra definición válida y clarificadora sobre la globalización sería que es el «proceso de toma de todas las decisiones técnicas, financieras, administrativas, de personal, mercadotécnicas y de otra índole empresarial necesarias para facilitar la localización»; mientras que fuera del ámbito de la localización, podría definirse como «proceso general de integración económica, política, tecnológica y social de alcance mundial» (Guerra, 2011). 12 La internacionalización, abreviada como «i18n», consiste en aplicar un modo de diseño y desarrollo que elimine obstáculos a la localización o la distribución internacional, de modo que se pueda cambiar el lenguaje sin tener que rediseñar el producto. Se podría decir que abarca dos ámbitos: la internacionalización del código fuente y la internacionalización de la documentación. Un ejemplo claro del primer ámbito sería el uso de Unicode (UTF-8 o UTF-16) para evitar problemas de codificación del lenguaje, de forma que no haya que modificar el código para que sea compatible con lenguas que no tengan el alfabeto latino o en las que la orientación del texto esté en vertical o invertida (hacia la izquierda). Otro aspecto que hay que tener en cuenta es el tamaño de los botones, cuadros, menús, etc.: el desarrollador (o, en última instancia, el localizador, si está en su mano) debe establecer unas dimensiones que permitan que quepa el texto en lenguas que son más extensas de forma natural. Hay lenguas que necesitan muy poco espacio (como el inglés o la mayoría de las lenguas orientales) y lenguas que necesitan mucho más espacio (generalmente, lenguas aglutinantes como el alemán, el sueco o el finés). La localización, abreviada como «l10n», es la adaptación lingüística y cultural de un producto para el locale (país/región e idioma) meta. En esta etapa se tienen en cuenta las connotaciones culturales y políticas de los colores, los iconos, los símbolos, las imágenes y las referencias a personas, costumbres y acontecimientos propios de la cultura meta, ya que una mala adaptación puede provocar que el resultado sea inadecuado u ofensivo para el usuario final y el producto no tenga éxito. También se tienen en cuenta los formatos de las fechas y horas, las direcciones, los números de teléfono, las unidades de medida, las divisas, ordenamiento y presentación de listas, uso de nombres personales y formas de tratamiento, y cualquier otro elemento que varíe en función del país o región. Aunque sea el localizador el que deba tener en cuenta todos estos aspectos en el momento de localizar el producto, es muy probable que el éxito resida en la calidad de la internacionalización llevada a cabo por el desarrollador. Si el producto no está bien internacionalizado, será necesario modificar o incluso rediseñar el producto para permitir la adaptación a otras lenguas. Por regla general, cuanto más relacionadas se encuentren dos lenguas o dos culturas, menos cambios será necesario realizar. A nivel lingüístico, las lenguas que compartan el mismo alfabeto exigirán menos cambios en el 13 código fuente para permitir su internacionalización. A nivel cultural, entre América y Europa, por ejemplo, hay menos diferencias culturales, pues hay mucha mayor influencia entre ambos continentes y presentan muchas más semejanzas en su forma de concebir el mundo, la sociedad, los valores, las costumbres, etc. Normalmente, las grandes diferencias se dan entre el mundo occidental y el mundo oriental. Por ejemplo, en el caso de los colores se debe tener en cuenta que en China el color blanco se considera negativo y es el color del luto, mientras que en Europa simboliza la paz, la inocencia, la pureza y es el color del vestido de bodas. En cuanto a los iconos, uno de los casos de error más comunes en la localización de software y sitios web se da al indicar las lenguas con las banderas de los países, ya que algunas lenguas se hablan en diferentes países y, habitualmente, con bastantes variaciones. Un rasgo característico del mundo oriental es que se prefieren interfaces muy dinámicas, coloridas y con una apabullante cantidad de imágenes y enlaces, mientras que el mundo occidental se siente más cómodo con interfaces claras y minimalistas. Otra característica propia del software con la que los localizadores deben saber lidiar es con las variables. Las variables son elementos que se emplean para almacenar y hacer referencia a otro valor y generalmente aparecen con el símbolo de porcentaje % y una letra; por ejemplo, «%s». Estas deben permanecer igual, pero pueden cambiar de posición en una frase. La dificultad que conllevan las variables es que muchas veces no se sabe a qué van referidas y, por tanto, cuesta más redactar la frase. Esto ocurre especialmente cuando pueden referirse a elementos en femenino o masculino y singular o plural. Por ejemplo, para «New %s successfully created!», el localizador tendría que averiguar a qué va referida esa variable para poder seleccionar la opción más correcta. No obstante, hay otros casos en los que se puede cambiar la posición de la variable para solucionar el problema; por ejemplo: «You found a %s!» podría traducirse por «Has encontrado: %s». Por último, la traducción, abreviada como «t9n», es el proceso de reproducir un texto de una lengua original a una lengua de destino. En esta etapa se tendrán en cuenta todos los aspectos propiamente lingüísticos: se prestará atención a la gramática, la ortografía, la coherencia, el registro del lenguaje, el estilo, las frases hechas… todo lo relacionado con la lengua. La mejor forma de lograr una traducción de calidad en este tipo de textos es gestionando el archivo traducible desde una herramienta de traducción 14 asistida por ordenador, ya que podrán utilizarse glosarios y memorias de traducción para mantener la coherencia terminológica y de estilo y se podrá revisar el texto con mayor facilidad, de forma que se detecten y corrijan los posibles errores gramaticales y ortotipográficos que pueda haber. En cambio, si se realiza la traducción desde un editor de lenguaje de programación, la revisión y la corrección de errores lingüísticos serán más arduas. 3.1.3 Principales herramientas para la localización de software y apps Aunque cada sistema operativo tiene un lenguaje de programación distinto, si el producto está bien internacionalizado será posible extraer el archivo que contiene el texto traducible y traducirlo desde múltiples herramientas compatibles, aparte de las herramientas propias de desarrollo. Las herramientas TAO (traducción asistida por ordenador) suponen una gran ayuda para la traducción de archivos en una gran variedad de formatos. Además de ser compatibles con muchas extensiones de archivos, aceleran el proceso de traducción gracias a la detección de palabras u oraciones repetidas y a una gestión eficaz de la terminología mediante bases de datos terminológicas y memorias de traducción. En el caso de los archivos que contienen código, las herramientas TAO son capaces de separar el código del texto traducible, lo que facilita el proceso de traducción y evita que el localizador elimine parte del código por error y estropee la funcionalidad de este. Son numerosas las herramientas TAO, si bien las que tienen un uso más extendido y son compatibles con un mayor número de extensiones de archivos son SDL Trados Studio, MemoQ, Déjà Vu y OmegaT (libre y gratuita). También existen herramientas TAO especializadas en la localización de software, como SDL Passolo, Lingobit Localization, Alchemy Catalyst, Sisulizer, PoEditor… 3.2 Lenguajes de programación y localización 3.2.1 Características principales Cada sistema operativo tiene un lenguaje de programación distinto y, en función de este, se requiere el uso de unas herramientas concretas de desarrollo. 15 Además del sistema operativo, debemos tener en cuenta si la aplicación es nativa, web o híbrida (Appio, 2013): una aplicación nativa está completamente desarrollada en el lenguaje de programación adecuado para su sistema operativo; una aplicación web es una web a la que se accede a través de una URL en el navegador del dispositivo y se adapta al tamaño de este; y una aplicación híbrida es una aplicación nativa en cuyo desarrollo se utilizan frameworks de desarrollo basados en lenguajes de programación web (como HTML, CSS y JavaScript). Debido a la tendencia de «Write once, run everywhere» («Escribir una vez, ejecutar en todas partes»; eslogan de Sun Microsystems), que consiste en desarrollar aplicaciones compatibles con múltiples plataformas con el fin de ahorrar tiempo y costes, los desarrolladores eligen crear sus aplicaciones basándose en lenguajes multiplataforma (como HTML5, PHP, JavaScript, Java, Python…) y la mayoría tiende a desarrollar aplicaciones basadas en lenguajes orientados a la web, en lugar de nativos, especialmente para los sistemas operativos Android y iOS (Soto, 2014). Los lenguajes orientados a la web más utilizados para el desarrollo de aplicaciones web son HTML5, CSS3, PHP, JavaScript y Ajax. El mayor inconveniente de las aplicaciones web es que tienen un acceso limitado al dispositivo y que dependen del navegador web de este. Por este motivo existen las aplicaciones híbridas, que aprovechan las ventajas de cada lenguaje de programación para ofrecer una amplia variedad de funcionalidades. En este trabajo nos centraremos, por tanto, en las aplicaciones nativas e híbridas, es decir, en aplicaciones basadas en lenguajes de programación de software nativos de cada sistema operativo móvil. La mayoría de los lenguajes de programación que se usan actualmente para el desarrollo de aplicaciones móviles nativas son los tradicionales (como Java, ObjectiveC, C++ y Visual Basic), pero cada vez con más frecuencia se utilizan en combinación con lenguajes más recientes, como el .xml. Al igual que se han ido adoptando nuevos lenguajes de programación, también se empieza a convertir en norma la separación entre el lenguaje natural y el lenguaje de programación, el uso de ciertos estándares de codificación de caracteres (como Unicode: UTF-8) y la posibilidad de que los elementos gráficos que contienen texto sean adaptables, es decir, que modifiquen sus dimensiones para albergar el texto que contienen completo y en función del tamaño de 16 la plataforma en la que se ejecuten las aplicaciones. Todos estos cambios se encuentran dentro del proceso de internacionalización. Cuanto mejor internacionalizada esté una aplicación móvil, menos problemas se darán en el posterior proceso de localización y traducción. A continuación, describimos cómo se puede traducir el texto de una app nativa desde sus IED propios. a) iOS de Apple iOS se programa en el lenguaje Objetive-C (y, en ocasiones, Python) y requiere el uso de la herramienta Xcode en un entorno de Mac. Recientemente, Apple ha comenzado a utilizar el lenguaje Swift (Apple, 2016), que es de código abierto y se integra a la perfección con el código escrito en Objective-C, para el desarrollo de aplicaciones para iOS, Mac, Apple TV y Apple Watch. La extensión del proyecto es .ipa y el archivo con el texto traducible se encuentra siguiendo la ruta en.lproj\Localizable.strings. También se puede exportar un archivo .xliff con el texto traducible desde la herramienta de desarrollo Xcode. Esta última es la alternativa más fácil para traducir el texto debido a la versatilidad y compatibilidad del lenguaje .xliff con las herramientas TAO. Para descompilar un archivo con extensión .ipa, basta con cambiar la extensión a .rar y abrirlo desde un programa que abra este tipo de archivos, como WinRar, 7zip, etc. Para realizar la traducción, se hace una copia de la carpeta en.lproj y se le llama es.lproj. Dentro de esta carpeta encontraremos el archivo Localizable.strings y otros archivos que puede que contengan texto traducible. La traducción de un archivo con extensión .strings se puede llevar a cabo desde un editor de código de programación como Notepad++ o desde herramientas de traducción asistida por ordenador como PoEditor (https://poeditor.com/localization/files/ios). También tenemos la posibilidad de realizar la traducción desde la herramienta de desarrollo propia de iOS: Xcode. 17 Cuando tengamos la traducción realizada, podemos probarla desde iEmu, que es el emulador de aplicaciones más utilizado para este sistema operativo. b) Android de Google Android se programa en el lenguaje Java modificado con el uso de varias herramientas, entre las que destacan NetBeans, Eclipse y Android Studio. NetBeans es un IDE de código abierto y gratuito para el desarrollo en Java, JavaScript, HTML5, PHP, C/C++. Eclipse es un programa de software de código abierto y gratuito que fue creado para la programación en diferentes lenguajes, especialmente Java, y es uno de los pocos IDE (integrated development enviroment o entorno de desarrollo integrado) que están preparados con el SDK (software development kit o kit de desarrollo de software) de Android. No obstante, desde la llegada de Android Studio 2.0, Eclipse parece estar cayendo en desuso (El androide libre, 2015). Las aplicaciones de Android tienen la extensión .apk, que corresponde a las siglas de «Android Application Package»: aplicación empaquetada de Android, es decir, un paquete para el sistema operativo Android. Este formato es una variante del formato JAR de Java y se usa para distribuir e instalar componentes empaquetados para la plataforma Android para teléfonos inteligentes y tabletas. El formato .apk es básicamente un archivo comprimido en ZIP con diferente extensión, por lo que puede ser abierto e inspeccionado usando un software archivador de ficheros como 7-Zip, Winzip, WinRAR o Ark. No obstante, esta fórmula de descompilación no es del todo efectiva y a menudo no muestra todas las carpetas que contiene la aplicación. La mejor forma de descompilar un archivo .apk es utilizar una herramienta de descompilación, como APK Tool o APK Studio. El texto traducible se muestra en la carpeta values, en el archivo string.xml. Para su localización, se accede a res\values, se hace una copia de la carpeta values y se le cambia el nombre por values-es. A continuación, se busca en la carpeta el archivo string.xml, y se borra el resto de archivos. Al tratarse de 18 un archivo xml, se puede traducir con Android Studio, Notepad++ y con la mayoría de herramientas de traducción asistida (Trados, MemoQ, Déjà Vu, OmegaT, PoEditor…). c) BlackBerry de RIM Para desarrollar aplicaciones para BlackBerry se utiliza el lenguaje C++ y Java. El SDK de BlackBerry 10, también denominado QNX Momentics IDE, es la nueva plataforma de desarrollo para BlackBerry y permite desarrollar apps nativas mediante el IDE Cascades (QML + C++), además de apps basadas en web, que abordan un desarrollo creado con los estándares HTML5, CSS3 y JavaScript, y apps basadas en AIR, más un Runtime for Android, que permite ejecutar aplicaciones creadas para el sistema operativo móvil de Google en la plataforma BB10 (Luna, 2013). Este SDK también actúa como simulador de aplicaciones. Los archivos traducibles suelen tener la extensión .ts, aunque también hay ocasiones en las que el texto traducible se encuentra en archivos de recursos con extensión .rrh o .rrc. La estructura de un archivo .ts es básicamente la de un archivo .xml, lo que facilita su manejo al localizarlo. d) Windows Phone y Windows 10 Mobile de Microsoft Windows Phone ha sido el sistema operativo de Microsoft desde el 2010. No obstante, fue sustituido en 2015 por Windows 10 Mobile (Babel, 2016). Los lenguajes de programación que se utilizan para desarrollar aplicaciones en este entorno son C# y Visual Basic con XAML, JavaScript con HTML, o C++ con DirectX y/o XAML (Microsoft, 2016). La extensión de la app es .xap, que tiene una estructura compleja y contiene muchos archivos de librerías .dll. El texto traducible se encontrará en la carpeta de recursos, en un archivo .resx. Podemos usar Telerik JustDecompile para descompilar el archivo .xap y el emulador 19 Build 10240 de Windows 10 Mobile o el Emulador de Microsoft para Windows 10 Mobile para el testeo. 3.2.2 Comparación de sistemas operativos A continuación, podemos ver una tabla que resume de manera más clara las diferentes características de cada sistema operativo comentadas anteriormente. Tabla 1. Comparación de las características de los SO Empresa Lenguaje Herramienta de iOS Android Apple Google Objective-C, Java Python, Swift xml Xcode programación Extensión app .ipa Extensión texto .strings trad. .xliff Descompilación Android Studio BlackBerry OS RIM Java, C++ Cambio de Apktool, extensión a Android .rar Multitool Mobile Microsoft C# y Visual Basic .NET JavaME, Windows SDK, BlackBerry Windows App JDE Studio .cod .xap .apk .xml Windows 10 .ts .rrh y .rrc .resx Coddec (poco Telerik fiable) JustDecompile Windows Phone Emulador iEmu BlueStacks BlackBerry Emulator, Build JDE 10240 de Windows 10 Mobile TAO l0n Tiendas Xcode Apple App Store Cualquier BlackBerry TAO Java Plug-in compatible for Eclipse con .xml Crowdin Google Play Blackberry Windows Phone App World Marketplace Fuente: Elaboración propia 20 Notepad++, Jedit Aunque cada plataforma continua teniendo sus propios lenguajes de programación, existen iniciativas como Java ME, una plataforma de dispositivos móviles que fue creada con el objetivo de lograr una portabilidad de aplicaciones entre plataformas móviles, de forma que fueran compatibles con todos los sistemas operativos. Desde el punto de vista empresarial, pueden existir muchas causas por las que no quieran adoptar este lenguaje pero, desde el punto de vista del desarrollador y el localizador, es irrelevante, pues el texto traducible se encontraría aislado del código en un archivo .xml o similar. 3.2.3 Implicación en la creación de apps El primer factor que hay que tener en cuenta para permitir la adaptación del producto a otros países o regiones es la internacionalización. El proceso de internacionalización se podría dividir en dos: la creación de un código fuente lo más adaptable posible a las diferentes lenguas y la creación de la documentación. A continuación, vamos a tratar los aspectos que se han de tener en cuenta en el proceso de internacionalización, casi todos ellos relacionados con un buen desarrollo del código fuente de la app. Convivencia del lenguaje natural y el lenguaje de programación. Hace unos años, el texto que incluía un programa de software se encontraba incrustado en los archivos que contenían el código. Para facilitar y mejorar el proceso de internacionalización, los desarrolladores comenzaron a aislar el texto traducible en un archivo aparte que se vinculaba con los archivos que contenían el código mediante referencias dentro de estos. De esta forma, el texto traducible era más fácil de localizar y se minimizaba el riesgo de que el traductor-localizador estropeara alguna cadena (o string) por error. Limitación de espacio en las interfaces. Una aplicación bien internacionalizada contará con botones, cuadros de diálogos y menús con 21 espacio suficiente para que quepa el texto completo correctamente esté en la lengua que esté. En última instancia, se permitirá realizar un redimensionamiento de los elementos gráficos (como los botones, por ejemplo). Fig. 1. Captura de la app Facturas Redacción de contenido mediante variables. El uso de las variables simplifica mucho el código, pero a veces dificulta el proceso de traducción por falta de contexto. El localizador deberá saber a qué se refiere cada variable para procurar la traducción más correcta y precisa posible e introducirlas correctamente para evitar problemas de funcionalidad. Hay ocasiones en las que cambiando el orden de las palabras, logramos una traducción correcta sin necesidad de saber exactamente a qué se refiere cada variable (véase la Fig. 2). También es importante saber ubicarlas en los archivos, ya que a veces pueden encontrarse lejos de las frases en las que se utilizan y quedarse sin traducir. Fig. 2. Fragmento de código con variables de una app en inglés y en español. 22 Códigos de control. Los códigos de control (por ejemplo, \n como salto de línea o \t como tabulador) se encuentran introducidos en el texto traducible, al igual que las variables, por lo que el localizador debe tener cuidado de no borrarlos, ya que su eliminación estropearía el formato del texto y podría crear problemas de funcionalidad. Falta de contexto. Muchas veces las cadenas de texto consistirán en palabras fuera de contexto, como, por ejemplo, los elementos de un menú. Para facilitar la tarea de localización, el desarrollador puede añadir información en el código que ayude a contextualizar esas palabras y procurar una traducción más precisa y correcta. En la siguiente imagen (Fig. 3) podemos ver un error por falta de contexto en el que se ha traducido «Home» por «Inicio», cuando, por contexto, significaría «Casa». Fig. 3. Captura de pantalla de la app Facebook. Fuente: https://goo.gl/XkOtlu 23 Codificación de caracteres. La mejor forma de que una aplicación pueda adaptarse a todas las lenguas sin que haya problemas de codificación del lenguaje, especialmente en lenguas que no utilizan el alfabeto latino, es configurar el estándar de codificación de caracteres en Unicode (UTF-8 o UTF16). En la siguiente imagen (Fig. 4) podemos ver un ejemplo de un problema de codificación en una pantalla de información sobre la versión Android 6.0.1 en alemán. Fig. 4. Captura de pantalla de información sobre Android 6.0.1 en alemán. Fuente: https://goo.gl/IQMxLU Espacios adicionales. Debemos tener cuidado y no borrar nunca los espacios adicionales, ya que pueden utilizarse para justificar columnas o concatenaciones de cadenas de texto. Otros elementos no traducibles. Debemos prestar atención a las cadenas de texto en mayúscula, pues es probable que no se traduzcan. Tampoco debemos 24 traducir palabras unidas por guiones bajos (palabras_con_underscore) y palabras apocopadas (o CamelWords). Si nos encontramos con una aplicación mal internacionalizada, o sin siquiera tener en cuenta la internacionalización, es muy probable que nos encontremos el texto traducible incrustado en el código. En este caso, el proceso de localización será más arduo, porque habrá que tener más conocimientos sobre programación para diferenciar el texto que se debe traducir y el texto que no debe tocarse y porque las herramientas de traducción asistida por ordenador no siempre serán compatibles con ese lenguaje, por lo que el texto tendrá que editarse desde el mismo programa de desarrollo o desde un editor de programación como Notepad++, por ejemplo. No obstante, si la aplicación está bien internacionalizada, el texto traducible se habrá aislado en un archivo aparte que, en función del sistema operativo, tendrá una extensión diferente. 3.3 El proceso de localización de una app En este apartado veremos en qué consiste cada extensión de archivo traducible, qué aspecto tiene la estructura del lenguaje y de qué forma hay que tratar el archivo para traducirlo. 3.3.1 iOS: .strings y .xliff Para el sistema operativo iOS, existen dos tipos de archivos traducibles, .strings y .xliff (acrónimo de «XML Localization Interchange File Format», formato de archivo de intercambio de localización XML). 3.3.1.1 .strings Un archivo .strings contiene una estructura muy limpia y sencilla que indica el texto traducible entre comillas (“”) y los comentarios del desarrollador o ingeniero de localización entre asteriscos (*). A continuación, podemos ver un ejemplo de la estructura de un archivo localizable.strings. 25 /*Please don't change the name of the application*/ "app.name" = "TODO List"; /*Fuzzy*/ "app.login.text" = "Enter your credentials below to login"; "app.login.message.success" = "Login successful !\nWelcome back %s !"; "app.login.message.error" = "Make sure you've entered the correct username and password"; "app.login.password.forget" = "I forgot my password"; "app.login.password.reset" = "Enter your address in the field below. A new password will be sent to your inbox."; "app.register.text" = "Sign up for free! No credit card required!"; "app.register.message.success" = "Thank you for signing up !\nPlease check your email address to activate your account."; "app.register.message.error" = "We were unable to sign you up.\nPlease correct the marked fields."; "app.menu.terms" = "Terms and conditions"; /*form_label*/ "app.login.text" = "Username"; "app.users.active" = "Just one user online"; /*form_label*/ "app.login.pass" = "Password"; 3.3.1.2 XLIFF La extensión .xliff consiste en un formato basado en xml específico para procesos de traducción que contiene etiquetas que distinguen el texto original y el texto traducido. En el caso de iOS, la herramienta Xcode permite exportar un archivo .xliff para traducirlo e importarlo posteriormente para añadirlo a la aplicación y realizar el testeo (Apple, 2015). 26 A continuación, podemos ver un ejemplo de la estructura de un archivo .xliff. La etiqueta <source> contiene el texto original y la etiqueta <target> contiene el texto traducido. <?xml version="1.0" encoding="UTF-8"?> <xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasisopen.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd"> <file original="MyApp/Base.lproj/Main.storyboard" datatype="plaintext" xml:space=“preserve” source-language="en" target-language="fr"> <body> <trans-unit id="app.name"> <source>TODO List</source> <target>TODO List</target> </trans-unit> <trans-unit id="app.login.text"> <source>Enter your credentials below to login</source> <target>Entrez vos identifiants ci-dessous pour vous connecter:</target> </trans-unit> <trans-unit id="app.login.message.success"> <source>Login successful !\nWelcome back %s !</source> <target>Connexion réussie !\nBon retour %s !</target> </trans-unit> <trans-unit id="app.login.message.error"> <source>Make sure you've entered the correct username and password</source> <target>Assurez-vous que vous avez entré le nom d'utilisateur correct et le mot de passe</target> </trans-unit> <trans-unit id="app.login.password.forget"> <source>I forgot my password</source> <target>J'ai oublié mon mot de passe</target> </trans-unit> <trans-unit id="app.login.password.reset"> 27 <source>Enter your address in the field below. A new password will be sent to your inbox.</source> <target>Entrez votre adresse dans le champ ci-dessous. Un nouveau mot de passe sera envoyé à votre boîte de réception.</target> </trans-unit> <trans-unit id="app.register.text"> <source>Sign up for free! No credit card required!</source> <target>Inscrivez-vous gratuitement ! Aucune carte de crédit !</target> </trans-unit> <trans-unit id="app.register.message.success"> <source>Thank you for signing up !\nPlease check your email address to activate your account.</source> <target>Je vous remercie pour vous inscrire !\nVeuillez vérifier votre adresse email pour activer votre compte.</target> </trans-unit> <trans-unit id="app.register.message.error"> <source>We were unable to sign you up.\nPlease correct the marked fields.</source> <target>Nous n'avons pas pu vous inscrire.\nVeuillez corriger les champs marqués.</target> </trans-unit> <trans-unit id="app.menu.terms"> <source>Terms and conditions</source> <target>Termes et conditions</target> </trans-unit> <trans-unit id="app.users.active"> <source>Just one user online</source> <target>Un seul utilisateur en ligne</target> </trans-unit> </body> </file> <file original="form_label" datatype="plaintext" xml:space=“preserve” sourcelanguage="en" target-language="fr"> <body> <trans-unit id="app.login.text"> 28 <source>Username</source> <target>Nom d'utilisateur</target> </trans-unit> <trans-unit id="app.login.pass"> <source>Password</source> <target>Mot de passe</target> </trans-unit> </body> </file> </xliff> 3.3.2 Android: .xml El XML (Extensible Markup Language) es un lenguaje de etiquetas, es decir, cada paquete de información está delimitado por dos etiquetas, como se hace también en el lenguaje HTML, pero separa el contenido de la presentación. Se trata un lenguaje estándar para el intercambio de información entre diferentes programas de una manera segura, fiable y libre, ya que no pertenece a ninguna compañía. Para traducir una aplicación, hay que seguir la ruta \res\values\strings.xml. Para crear un archivo con la traducción, se debe hacer una copia de la carpeta values añadiéndole el código de la lengua, por ejemplo, values-es. Se debe traducir el archivo strings.xml que aparece dentro de esa carpeta creada. El texto traducible se encuentra entre los signos > y <. A continuación, mostramos un ejemplo de la estructura de un archivo strings.xml (solo un fragmento) de una aplicación en inglés de un diccionario de finés a español. <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">fi-es</string> <string name="appNameSablon">{0} Dictionary</string> <string name="rateTitle">Rate {0}</string> <string name="rateCmd">Rate it</string> 29 <string name="rateQuestion">If you enjoy using {0}, please take a moment to rate it. Thanks for your support!</string> <string name="rateLater">Remind me later</string> <string name="rateNoThanks">No, thanks</string> <string name="titleInfo">Info</string> <string name="sorryCrash">Sorry, last time the application crashed because of an exception.</string> <string name="btnStacktrace">Stacktrace</string> <string name="btnSendMail">Send mail</string> <string name="btnContinue">Continue</string> <string name="btnExit">Exit</string> <string name="select_rating">Select Rating</string> <string name="btnReset">Cancel</string> <string name="btnBoth">Both</string> <string name="btnInfo">Info</string> <string name="infoExplanation">"To search for words, simply type text into search field. Click a table cell to reveal detailed information about a word, such as spelling and definitions."</string> <string name="questionDeleteDatabase">Do you really want to delete the database?</string> <string name="yes">Yes</string> <string name="no">No</string> <string name="btnRemoveDatabase">Remove App Data</string> <string name="couldNotDeleteDatabase">Could not delete database</string> <string name="otherApps">Other Apps</string> <string name="otherAppsLong">Check out our other apps, including languages such as Finnish, Swedish, French, German, Norwegian, Turkish etc.</string> <string name="otherAppsLink">More Dictionaries</string> <string name="otherInformation">Other Information</string> <string name="sourcesAndLicence">"The dictionary was gathered from following sources: http://en.wiktionary.org 30 http://de.wiktionary.org http://fi.wiktionary.org http://sv.wiktionary.org http://fr.wiktionary.org http://es.wiktionary.org http://nl.wiktionary.org http://no.wiktionary.org http://hu.wiktionary.org http://tr.wiktionary.org http://pt.wiktionary.org http://pl.wiktionary.org http://ru.wiktionary.org http://xdxf.revdanica.com/down/ http://wikipedia.org All content is licensed under GFDL. http://en.wikipedia.org/wiki/GNU_Free_Documentation_License"</string> <string name="lstOtherApps">de_en,fr_en,fi_en,sv_en</string> <string name="de_en_name">German-English Translate Dictionary</string> <string name="de_en_url">http://asdasd.com</string> <string name="fr_en_name">French-English Translate Dictionary</string> <string name="fr_en_url">http://asdasd.com</string> <string name="fi_en_name">Finnish-English Translate Dictionary</string> <string name="fi_en_url">http://asdasd.com</string> <string name="sv_en_name">Swedish-English Translate Dictionary</string> <string name="sv_en_url">http://asdasd.com</string> <string name="unzippingDatabase">Unzipping database...</string> <string name="noSdCardAvailable">No SD card available. Please install a SD card and start again.</string> <string name="notEnoughSpaceAvailableOnSdCard">Not enough space on {1}, about {0} MB required.</string> <string name="errorCopyingDatabase">Error copying database</string> <string name="unableToUnzipDatabase">Unable to unzip database</string> <string name="unableToOpenDatabase">Unable to open database</string> <string name="databaseLanguageError2">Database error: Could not find two 31 languages</string> <string name="sdCard">SD-Card</string> <string name="internalStorage">internal memory</string> <string name="details">Details</string> <string name="translations">Translations</string> <string name="synonyms">Synonyms</string> <string name="definitions">Definitions</string> <string name="examples">Examples</string> <string name="WordTypeNoun">Noun</string> <string name="WordTypeVerb">Verb</string> <string name="WordTypeAdverb">Adverb</string> <string name="WordTypeAdjective">Adjective</string> <string name="WordTypeNumeral">Numeral</string> <string name="WordTypePronoun">Pronoun</string> <string name="WordTypeParticle">Particle</string> <string name="WordTypePreposition">Preposition</string> <string name="WordTypeOther">Other</string> <string name="WordTypeConjunction">Conjunction</string> <string name="WordTypeInterjection">Interjection</string> <string name="WordTypePhrase">Phrase</string> <string name="WordTypeUnknown">Unknown</string> </resources> 3.3.3 Blackberry: .ts La estructura de este tipo de archivos es básicamente la de un archivo .xml. La etiqueta <source> contiene la cadena por defecto, y la etiqueta <translation> es la que se deberá editar para que contenga la cadena traducida para ese idioma. A continuación, podemos ver un ejemplo de la estructura de un archivo .ts con la traducción de inglés a español. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.0" language="es_ES"> <context> 32 <name>main</name> <message> <location filename="../assets/app.cpp" line="6"/> <source>My String</source> <comment>My Context</comment> <translation>Mi cadena</translation> </message> <message> <location filename="../assets/main.qml" line="12"/> <source>Hello world</source> <translation>Hola, mundo</translation> </message> </context> </TS> [Recuperado de: https://goo.gl/WRZcHV] Si este archivo se ha generado al añadir una lengua nueva, cada etiqueta <translation> contendrá el atributo type="unfinished", que deberá eliminarse al añadir la traducción; de lo contrario, no se utilizará esta traducción. 3.3.4 Windows 10 Mobile: .resx Un archivo .resx es un archivo de recursos que consiste en entradas XML, que especifican objetos y cadenas en etiquetas XML. En una aplicación de Windows 10 Mobile puede haber archivos .resx locales y globales. Los recursos locales se guardan en carpetas App_LocalResources y los recursos globales se guardan en una única carpeta llamada App_GlobalResources. El nombre de un fichero de recursos local será NombrePagina.aspx[.idioma[-cultura]].resx, por ejemplo: Categorias.aspx.engb.resx. El texto traducible se encuentra entre las etiquetas <value> y </value>. Para crear la versión en español de la aplicación, debemos hacer una copia del archivo Resources.resx y añadirle al nombre el código de nuestra lengua. En nuestro caso, el archivo se llamaría Resources-es-ES.resx, en la que el segundo ES indicaría la variante de España. Si queremos hacer una traducción de español neutro, el archivo 33 debe llamarse Resources-es.resx. Al tratarse de un archivo con estructura de .xml, podemos traducirlo con cualquier herramienta TAO que admita esa extensión o con un editor de lenguaje de programación como Notepad++. A continuación, podemos ver un ejemplo de la estructura de un archivo RESX. <?xml version="1.0" encoding="utf-8"?> <root> <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:element name="data"> <xsd:complexType> <xsd:sequence> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="type" type="xsd:string" /> <xsd:attribute name="mimetype" type="xsd:string" /> </xsd:complexType> </xsd:element> </xsd:schema> <resheader name="resmimetype"> <value>text/microsoft-resx</value> </resheader> <resheader name="version"> <value>2.0</value> </resheader> <resheader name="reader"> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> <resheader name="writer"> 34 <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> <data name="app.name" xml:space=“preserve”> <value>TODO List</value> <comment>Please don&apos;t change the name of the application</comment> </data> <data name="app.login.text" xml:space=“preserve”> <value>Enter your credentials below to login</value> <comment>Fuzzy</comment> </data> <data name="app.login.message.success" xml:space=“preserve”> <value>Login successful ! Welcome back %s !</value> </data> <data name="app.login.message.error" xml:space=“preserve”> <value>Make sure you&apos;ve entered the correct username and password</value> </data> <data name="app.login.password.forget" xml:space=“preserve”> <value>I forgot my password</value> </data> <data name="app.login.password.reset" xml:space=“preserve”> <value>Enter your address in the field below. A new password will be sent to your inbox.</value> </data> <data name="app.register.text" xml:space=“preserve”> <value>Sign up for free! No credit card required!</value> </data> <data name="app.register.message.success" xml:space=“preserve”> <value>Thank you for signing up ! Please check your email address to activate your account.</value> </data> 35 <data name="app.register.message.error" xml:space=“preserve”> <value>We were unable to sign you up. Please correct the marked fields.</value> </data> <data name="app.menu.terms" xml:space=“preserve”> <value>Terms and conditions</value> </data> <data name="app.login.text" xml:space=“preserve”> <value>Username</value> <comment>form_label</comment> </data> <data name="app.users.active" xml:space=“preserve”> <value>Just one user online</value> </data> <data name="app.login.pass" xml:space=“preserve”> <value>Password</value> <comment>form_label</comment> </data> </root> 36 4. Aplicación práctica En este apartado vamos a describir paso por paso el proceso de localización de una aplicación de Android, desde la descompilación del archivo .apk hasta la fase de testeo. La descripción de este proceso se ofrece meramente con fines de aprendizaje y práctica; en ningún momento se insta a que los traductores-localizadores conviertan en norma el proceso de descarga y descompilación de aplicaciones móviles a nivel profesional, pues el cliente le proporcionará los archivos. 4.1 Búsqueda y descarga de la aplicación Cualquier aplicación que se encuentre disponible en Google Play (Fig. 5) se puede descargar y descompilar. Una forma fácil de conseguir el archivo .apk de la aplicación es copiando su enlace de Google Play en el cuadro que aparece en el siguiente sitio web: https://apps.evozi.com/apk-downloader/ y descargándola o instalándola en un dispositivo móvil y transfiriéndola al ordenador, ya sea desde una app (como APK Extractor) o conectando el móvil al ordenador y buscando en las carpetas. 37 Fig. 5. Captura de página web de la tienda Google Play para apps de Android. 4.2 Descompilación La forma más fácil de descompilar una aplicación es con el programa APK Studio. Podemos encontrar el enlace de descarga en el siguiente sitio web: http://www.vaibhavpandey.com/apkstudio/ . A continuación, ejecutamos el programa. Debemos asegurarnos de que tenemos instalado en nuestro ordenador la versión más reciente de Java, pues, de lo contrario, podrían aparecernos errores al descompilar algún .apk. Para descompilar el archivo, hacemos clic en el icono de Android o abrimos el menú File\Open \APK, como se muestra en la siguiente captura de pantalla (Fig. 6). 38 Fig. 6. Ruta para descompilar un archivo .apk. Nos aparecerá la siguiente ventana (Fig. 7) para que indiquemos la ruta en la que se encuentra el archivo .apk que deseamos descompilar. Lo buscamos, lo seleccionamos y pulsamos Abrir. 39 Fig. 7. Búsqueda del archivo .apk que se desea descompilar. Posteriormente, nos aparecerá un cuadro para que indiquemos la ruta en la que deseamos guardar los archivos de la apk descompilada. Si no la cambiamos, estos archivos se guardarán en la misma carpeta en la que se encuentra el archivo .apk. Hacemos clic en el botón Decode (Descodificar) para que comience la descompilación, como se muestra en la siguiente imagen (Fig. 8). 40 Fig. 8. Ventana emergente con información sobre la descompilación. Si se produce algún error durante la descompilación, aparecerá todo el proceso de descodificación en el cuadro de la consola (el cuadro negro inferior) y nos indicará el motivo del error. Por otra parte, si al final del mensaje de la consola aparece «Could not find the main class: brut.apktool.Main. Program will exit», es muy probable que el error se deba a que el ordenador no cuenta con la versión más reciente de Java. Así, deberemos comprobar la versión que tiene el ordenador y, si fuera necesario, instalar la última versión de Java, reiniciar APK Studio y volver a repetir el proceso. Si el proceso se está ejecutando correctamente, aparecerá la siguiente pantalla (Fig. 9). 41 Fig. 9. Proceso de descompilación en curso. Sabremos que el proceso de descompilación se ha realizado correctamente cuando aparezca el proyecto correspondiente al archivo .apk en la interfaz de APK Studio, como se muestra en la siguiente imagen (Fig. 10). 42 Fig. 10. Proceso de descompilación realizado correctamente. 4.3 Creación de la carpeta values y gestión de archivos traducibles Tras haber descompilado la aplicación, debemos ir a la carpeta donde se han guardado todos los archivos del proyecto y buscar la carpeta values siguiendo la ruta res\values. A continuación, debemos hacer una copia de esta carpeta y añadirle el código de la lengua a la que vamos a traducir nuestra app. En este caso, la carpeta se llamaría values-es. También cabe la posibilidad de que ya existe la carpeta values-es, pero el texto de los archivos no esté traducido o esté traducido parcialmente. En este caso, podemos completar la traducción usando los archivos existentes o borrar la carpeta y crearla de nuevo, por si acaso no se encuentra el texto original completo. Dentro de la carpeta values-es encontraremos el archivo o los archivos traducibles. Generalmente, el texto se encuentra en el archivo strings.xml, pero en ocasiones es posible que nos encontremos con otros archivos que también contengan texto, como arrays.xml (que contiene listas de objetos), dimens.xml y styles.xml, entre otros. Estos dos últimos (y cualquier otro archivo .xml que no contenga texto traducible) son irrelevantes para la traducción, por lo que, al crear la carpeta values-es, los 43 borraremos. No obstante, los archivos strings.xml y arrays.xml deberán permanecer en la carpeta con el texto traducido. A continuación, podemos ver la estructura de la carpeta values y todos los archivos .xml que contiene la app con la que estamos trabajando (Fig. 11). Fig. 11. Estructura de la carpeta values de una app de Android. 4.4 Traducción de archivos .xml traducibles Una vez que hemos encontrado los archivos .xml traducibles, en este caso, strings.xml y arrays.xml, podemos proceder a su traducción de varias formas: podemos traducirlos desde una herramienta TAO que sea compatible con esta extensión o podemos abrir los archivos desde un editor de código de programación (como Notepad++) e ir modificando el texto por la traducción. Tratándose de la extensión .xml, la compatibilidad no será un problema, pues está creado con el fin de ser compatible en el mayor número de plataformas posible. En caso de traducirlo desde una herramienta TAO, solo tenemos que abrir el archivo desde esta, ya sea creando un proyecto o abriéndolo como un documento individual. 44 Algunas de las ventajas de este tipo de herramienta radican en que se pueden utilizar glosarios o memorias de traducción que faciliten y aceleren la tarea de traducción, permiten hacer un recuento de las palabras traducibles (y repeticiones) para presentar un presupuesto o estimar el tiempo que llevaría la traducción, y se puede evitar que se modifique el código xml por error y se estropee la funcionalidad, ya que la herramienta lo aísla del texto traducible y no lo muestra. No obstante, sí que debemos tener en cuenta las variables y los códigos de control que puedan aparecer: el localizador debe tener cuidado de no borrarlos y colocarlos en el lugar correcto. También debemos prestar atención a los espacios en blanco adicionales y no borrarlos tampoco, ya que podrían tener importancia para las concatenaciones. De igual modo, algunas herramientas TAO permiten configurar el proyecto de forma que las variables se conviertan en bloques de etiqueta que no pueden ser modificados por el traductor. En la siguiente imagen (Fig. 12) podemos ver cómo se presentaría el texto traducible si se gestionara mediante la herramienta de traducción asistida SDL Trados 2015. Fig. 12. Vista de archivo xml desde SDL Trados 2015. 45 En caso de querer traducir el texto (o corregir los errores durante el testeo) desde Notepad++, por ejemplo, el texto traducible aparecerá en negro (siempre y cuando esté seleccionado el lenguaje .xml en el programa), como se muestra en las siguientes imágenes (Fig. 13 y Fig. 14), que se corresponden a los archivos strings.xml y arrays.xml, y el localizador debe tener cuidado de no tocar las etiquetas, pues podría poner en peligro la funcionalidad del archivo. Si el programa no reconoce la extensión .xml y, por tanto, todo el texto aparece de color negro, podemos seleccionarlo desde el menú Lenguaje\XML. Como podemos ver en las figuras 13 y 14, en el archivo strings.xml, el texto traducible se encontrará entre las etiquetas <string> y </string>, mientras que en el archivo arrays.xml, se encontrará entre las etiquetas <item> y </item>. Fig. 13. Vista de archivo strings.xml desde Notepad++. 46 Fig. 14. Vista de archivo arrays.xml desde Notepad++. 4.5 Compilación Cuando tengamos la traducción finalizada, debemos guardar los cambios (en el caso de una herramienta TAO generaremos el archivo de destino) y asegurarnos de que los archivos traducidos sustituyen los archivos que había anteriormente en la carpeta values-es cuando la creamos. También debemos asegurarnos de que en esta carpeta solo se encuentren los archivos .xml traducibles. Si hay alguno más, debemos borrarlo. Una vez que tengamos los archivos traducidos en la carpeta values-es y hayamos borrado el resto, será el momento de compilar de nuevo la aplicación para verla desde un emulador, probarla y corregir los errores. Para compilar la aplicación, debemos abrir de nuevo el programa APK Studio y seguir la ruta File\Open\Directory, como se muestra en la siguiente imagen (Fig. 15). 47 Fig. 15. Ruta para compilar la aplicación. A continuación, aparecerá una ventana en la que debemos buscar el archivo .yml, que se encuentra en la carpeta de la aplicación descompilada, como se muestra en la siguiente imagen (Fig. 16). Cuando encontremos el archivo, lo seleccionamos y hacemos clic en Abrir. 48 Fig. 16. Ubicación del archivo YML. Una vez que finalice el proceso de compilación, que puede durar unos minutos, encontraremos la aplicación compilada (.apk) junto a la carpeta que contiene la aplicación descompilada. Es muy importante que borremos el resto de archivos .xml que no contengan texto traducible, ya que APK Studio puede reconocer esos archivos duplicados y provocar errores que impidan que la aplicación se vuelva a compilar. 4.6 Firma de la aplicación Para firmar la aplicación, utilizaremos el programa APK Signer, que nos podemos descargar del siguiente enlace: https://goo.gl/aJdD3U. Una vez que se haya descargado, descomprimimos el archivo .zip y ejecutamos el archivo .jar que contiene. Entonces nos aparecerá un cuadro que debemos rellenar con la información correspondiente: 1. En el primer campo (JDK Path), tenemos que seleccionar la ruta en la que se encuentra el JDK (no JRE) que tiene nuestro ordenador, que debe ser una versión superior a la 6. Este archivo se encuentra en la ruta C:\Archivos de 49 programa\Java\jdk. Si no aparece ninguno, podemos descargarlo del enlace anterior e instalarlo en nuestro ordenador. Luego, debemos seleccionar la subcarpeta bin y hacer clic en Abrir, como se muestra en la siguiente imagen (Fig. 17). Fig. 17. Selección de la ruta del JDK. 2. En el campo Target file de la pestaña Key Generator, hacemos clic en [Save as…], damos un nombre y una ubicación al archivo de firma (keyfile) que tenemos que crear y hacemos clic en Guardar. 3. Introducimos todos los datos que nos piden o, al menos, los obligatorios, que son los campos de las contraseñas, el alias y Validity. A veces puede que sea necesario rellenar algún otro campo para generar el archivo, así que rellenamos uno más. 4. Escribimos las contraseñas (password y alias password) que deseemos. Estas deben tener más de seis caracteres y pueden ser la misma. Las repetimos en los campos de la derecha para confirmarlas. 5. Dejamos el campo validity con el dato «25». 50 6. Hacemos clic en Generate Keyfile para generar el archivo de firma. Nos aparecerá un mensaje que indique que se ha generado el archivo correctamente. 7. Vamos a la pestaña Signer, hacemos clic en Load Keyfile, buscamos el archivo de firma que se acaba de generar y lo cargamos. 8. Escribimos la contraseña y la contraseña de alias. El campo Alias se rellenará automáticamente. 9. Hacemos clic en [Load target file…] y cargamos el archivo .apk que se generó en la compilación. A continuación, hacemos clic en Sign! Si no se produce ningún error, se generará la aplicación firmada, que incluirá la marca “SIGNED”, en la misma carpeta en la que se encontraba el .apk compilado. Tras esto, ya podemos abrir el .apk desde el emulador y probar la aplicación. 4.7 Testeo El testeo consiste en probar un producto de software para ver si tiene errores y poder corregirlos. Estos errores pueden estar relacionados con la funcionalidad del código, con los textos y con la apariencia general del producto. Para realizar el testeo de la app vamos a utilizar el emulador BlueStacks. Este puede descargarse del siguiente enlace: http://www.bluestacks.com/es/index.html. Cuando esté instalado, debemos iniciar sesión con nuestro correo electrónico o crear una cuenta nueva. A continuación, podemos abrir la aplicación de dos formas: haciendo clic sobre el archivo .apk o abriendo el emulador BlueStacks y pulsando el icono de Instalar apk que se encuentra en el panel de la izquierda, como se muestra en la siguiente imagen (Fig. 18). 51 Fig. 18. Interfaz del emulador BlueStacks con indicación del icono Instalar apk. Posteriormente, se instalará la aplicación y su icono nos aparecerá en la pantalla principal. Al hacer clic en el icono se nos abrirá la aplicación en otra pestaña y podremos comenzar a probarla, comprobando que todo el texto está traducido y cabe perfectamente en el cuadro de diálogo o botón en el que se encuentra. Debemos tener en cuenta que la aplicación se mostrará en el idioma que esté elegido para la interfaz de BlueStacks. Si deseamos ver la aplicación en otro idioma, debemos acceder al menú Configuración (haciendo clic en el icono de tuerca que aparece en la parte superior derecha de la pantalla), hacer clic en Cambiar idioma y seleccionar el idioma deseado. Mientras estamos probando la aplicación, podemos tener los archivos de texto traducible (strings.xml y arrays.xml) para ir corrigiendo los errores a medida que los vamos viendo. Cuando lo hayamos probado y corregido todo, debemos guardar los cambios en los archivos .xml y repetir el proceso de compilación y firma de la aplicación (véanse los apartados 4.5 y 4.6). Recomendamos volver a probar la aplicación después de haberla modificado y compilado de nuevo para verificar que se han resuelto todos los problemas. Para instalar la versión nueva de la aplicación en BlueStacks, primero debemos desinstalar la 52 aplicación. Para ello, accedemos al menú Configuración, hacemos clic en Aplicaciones, seleccionamos la aplicación que deseamos desinstalar y hacemos clic en Desinstalar. Por último, volvemos a hacer clic en el icono de Instalar apk e instalamos la última versión de la aplicación. 53 5. Conclusiones En este trabajo, y durante su elaboración, nos percatamos de que el desarrollo de aplicaciones móviles es un ámbito que se encuentra en constante cambio, como cualquier otro ámbito relacionado con la Informática y las Nuevas Tecnologías, por lo que tanto los desarrolladores como los traductores-localizadores tienen que estar actualizándose constantemente. Aunque la base del proceso de desarrollo, internacionalización y localización sea la misma, van apareciendo diferentes lenguajes de programación y diferentes plataformas de desarrollo que permiten crear aplicaciones híbridas que combinan varios lenguajes de programación (nativos y web) con la intención de ahorrar tiempo y costes. De hecho, todo avance que se produce en este ámbito viene motivado por el mismo interés: crear aplicaciones de la forma más rápida y barata posible para el mayor número de plataformas posible. Esto se consigue simplificando y facilitando el proceso de desarrollo de aplicaciones mediante el uso de herramientas de desarrollo y lenguajes multiplataforma, de forma que se escriba el código en un lenguaje fácil y versátil una sola vez y luego sea compatible y se pueda ejecutar en múltiples plataformas. Desde el punto de vista de la localización, podemos ver que la mayoría de las aplicaciones móviles que encontramos en las tiendas en línea están bien internacionalizadas y que el texto traducible se encuentra aislado en un archivo aparte, que suele tener la estructura de un archivo .xml. Esto supone una gran ventaja para el traductor-localizador, ya que las herramientas TAO que existen actualmente son compatibles con esta extensión de archivo y pueden facilitar y acelerar mucho el proceso de traducción y revisión del texto traducible. Por último, también hemos podido comprobar que desde la herramienta de desarrollo de iOS, Xcode, se puede exportar el texto traducible en formato .xliff, que es aún más simple y fácil de gestionar que .xml. Puede que en un futuro se ofrezca la misma opción en los entornos de desarrollo para otros sistemas operativos móviles. 54 6. Bibliografía Ahmad W., Sirhindi R., Adeeba F. y Hussain, S. (s.d.). Localization of Mobile Platforms. Recuperado de: http://goo.gl/A1bLL3 Appio. (2013). Tipos de apps: nativas, híbridas y web apps. Recuperado de: http://appio.es/tipos-de-apps/ Apple (s.d.). Swift. Un lenguaje potente y abierto a todos para crear apps increíbles. Recuperado de: http://www.apple.com/es/swift/ Bernaola, I.; Morales, A. I.; Payros, I. (2014). Con mala escoba mal se barre: los problemas de la localización de productos informáticos no internacionalizados. Recuperado de: http://www.translationdirectory.com/article1117.htm De la Cova, E.; Alonso Jiménez, E. (2013). Introducción a la localización: Materiales docentes. Universidad Pablo de Olavide de Sevilla. Recuperado de: DIALNET, https://dialnet.unirioja.es/servlet/libro?codigo=557492 Guerra Maya, C. (2011). La localización de un software: Principios básicos para no morir en el intento. Recuperado de: https://goo.gl/tiJon1 iOS Developer Library (2015). Localizing Your App. Recuperado de: https://goo.gl/aoFbhn Jimenez Ramalho, M. (2015). Gestión de traducción de aplicaciones móviles en diferentes idiomas. Universidad de Granada. Recuperado de: http://hdl.handle.net/2117/77671 Lachat Leal, C. (2015). Localización de aplicaciones: estrategias de cooperación con los desarrolladores. Asociación Ibérica de Estudios de Traducción e Interpretación (AIETI). Recuperado de: http://hdl.handle.net/10481/35067 Luna, F. (2013). Desarrollo BlackBerry 10 – Cascades. Datta Maganize. Recuperado de: http://www.dattamagazine.com/desarrollo-blackberry-10-cascades/ Martínez Robledo, M. I. (2004). La tecnología multimedia: enseñanza de lenguas, terminología y traducción. (Tesis doctoral). Universidad de Granada. Recuperado de: http://digibug.ugr.es/bitstream/10481/4574/1/TESIS%20DOCTORAL.pdf 55 Miranda, L. (2016). Apple anunció que la App Store ya llegó a los dos millones de aplicaciones. Wayerless. Recuperado de: https://goo.gl/Xnhl2q Muccini, H.; Di Francesco, A.; Esposito, P. (2014). Software Testing of Mobile Applications: Challenges and Future Research Directions. University of L’Aquila, Italia. Recuperado de: reposto.di.univaq.it/aigon2/index.php/attachments/single/133 Pérez, D. (2016). Maru OS, convergencia entre PC y móvil: Continuum para Android. El Androide libre. Recuperado de: http://goo.gl/rXJsEJ Rivera González, I. C. (2003). Desarrollo de Aplicaciones para Dispositivos Móviles. Recuperado de: https://goo.gl/e12Aa3 Roturier, J. (2015). Localizing Apps: A Practical Guide for Translators and Translation Students. Recuperado de: http://goo.gl/l0KX0X Seghiri, M. (2013). La localización del inglés al español de aplicaciones para dispositivos móviles inteligentes. Recuperado de: http://hdl.handle.net/10630/6437 Soto, M. (2014). Lenguajes de programación: ¿Cuál prefiere el desarrollador de aplicaciones móviles? Tecnobitt. Recuperado de: http://goo.gl/EJ1lLA Statista (2016). Apple: most popular app store categories 2016. Recuperado de: http://goo.gl/0Ltf5k Tercedor, M. (2005). Aspectos culturales en la localización de productos multimedia. Recuperado de: http://goo.gl/X4Q5wl Zamora, J. A. (2015). Eclipse ha muerto, larga vida a Android Studio. El androide libre. Recuperado de: http://goo.gl/xkSIwk 56