Mejores prácticas para crear archivos de traducción para múltiples plataformas

Actualmente estamos ante el problema de crear y alojar traducciones para una aplicación para múltiples plataformas (iOS, Android, HTML5, BlackBerry …). ¿Existen mejores prácticas para alojar las traducciones y crear los archivos de traducción necesarios (en.lproj / Localizable.string, valores-fr / strings.xml, …) sobre la marcha?

Pienso en hospedar las traducciones y sus claves en una tabla de Google Docs (u otras plataformas) y exportar los datos a csv y usar scripts para crear los archivos.

Busco en Internet, pero no encontré un buen punto de partida hasta ahora.

Puede probar Loco o Shuttle como herramienta de localización multiplataforma.

¿Conoces Transifex ?

Transifex es una moderna plataforma de localización de código abierto. Es un sistema web que automatiza el flujo de trabajo de traducción para proyectos internacionales complejos.

Hemos utilizado con éxito PhraseApp para múltiples plataformas. Tienen una API para poder proporcionar scripts de shell en el árbol del proyecto para actualizar las traducciones con un comando rápido. Incluso puede hacer eso como un paso de construcción.

Tenga en cuenta que parece haber algunos obstáculos difíciles de gestionar para estos servicios, ya que las diferentes plataformas localizadas tienen diferentes conjuntos de características. Por ejemplo, Android apoya la pluralización que iOS no IIRC.

Hay http://www.getlocalization.com/

Es gratis si está dispuesto a publicar y compartir sus cadenas individuales y su traducción públicamente.

Hago aplicaciones en inglés y japonés. Lo que hago es almacenar ambas traducciones en un archivo al que pueda acceder en cualquier lugar de la aplicación, es decir, una variable global, una instancia, un singleton o lo que se sienta cómodo.
Haga todas las traducciones que necesita en casa porque los traductores de computadoras no dicen las cosas bien. Entonces, donde quiera que los use, tire de la lista basándose en un valor booleano que diga inglés o japonés.

Una herramienta de traducción de código abierto en línea (desplegable en su servidor de elección) que puede cumplir sus requisitos es Pootle , que se construye en la parte superior de Translate Toolkit . He utilizado Pootle como traductor para LibreCAD . Puedes buscar en el servidor de traducción de LibreCAD y verlo en acción. LibreCAD utiliza Qt como su base-marco y Pootle maneja la carga y descarga de archivos TS, que se utilizan para las traducciones en Qt. Habiendo usado también Transifex , puedo decirte que Pootle no es tan elegante (puedes verlo por ti mismo, aunque tengas en cuenta que el servidor de traducción de LibreCAD usa una versión anterior de Pootle), pero no es malo trabajar con él. Sólo debe establecer que los archivos que necesita su aplicación para las traducciones se pueden exportar (y posiblemente importar) desde (y posiblemente) a su servidor de traducción. Puede traducir utilizando un navegador web o puede traducir sin conexión y luego proceder a cargar sus archivos editados y aplicar por lotes todas sus traducciones. Otra herramienta de traducción basada en la web que parece proporcionar un enfoque similar pero más moderno que Pootle (se ve mejor y tiene una integración de control de versión ajustada), mientras que se basa en Translate Toolkit también, es Weblate . Esto también es de código abierto y se puede implementar en el servidor de su elección.

Para proporcionar más información, si echa un vistazo a los formatos de archivo relacionados con la traducción , tendrá una mejor idea de lo que Pootle y Translate Toolkit son capaces de exportar / importar. De esa lista y de mi experiencia de traducción, puedo decirte que los archivos INI se utilizan para traducciones en Joomla! Núcleo y extensiones, las matrices de traducción PHP se utilizan para traducciones en aplicaciones Yii , y los archivos Qt Linguist TS se utilizan, como se mencionó anteriormente, para traducciones en aplicaciones Qt. También he experimentado con GNU gettext , que es el aprobado por la Free Software Foundation de la biblioteca para la localización. GNU gettext utiliza archivos PO para las traducciones, que pueden ser manejados por Translate Toolkit.

La idea central detrás de todos los enfoques de localización, no importa qué es la plataforma, es más o menos lo mismo. Usted diseña su código que tiene un lenguaje principal específico en mente y utiliza este lenguaje en su código. Inglés sería la opción ideal, pero esto no es necesario. Usted debe elegir un idioma que todos los desarrolladores puedan trabajar, un lenguaje que no ralentice el desarrollo (mientras que busca un par de etiquetas para los botones, no le gustaría pensar en sólo una etiqueta para los minutos), y un idioma que es Utilizado por su público objetivo principal, sólo en el caso de que un público objetivo principal existe y al mismo tiempo desarrollar con otro idioma en mente posiblemente haría que la aplicación se sienta antinatural para su público objetivo principal, después de que se ha traducido a su objetivo principal Lenguaje de la audiencia. Este es también el idioma en el que todos los traductores recibirán las cadenas del lenguaje fuente en (y, por lo tanto, tienen como punto de referencia), para traducir a todos los demás idiomas de destino. Puede que tenga que comprometerse, porque estamos hablando de uno y un solo idioma para el desarrollo. En movimiento, en cualquier momento durante el desarrollo que necesita para insertar una cadena de idioma en el código, no lo inserta directamente, sino que lo encierra en una llamada de función especial que se especifica por la plataforma de localización que utiliza. En una aplicación Qt, por ejemplo, en lugar de QLabel *label = new QLabel("Password:"); Usted escribiría QLabel *label = new QLabel(tr("Password:")); . Durante la ejecución de la aplicación, el idioma del usuario se determina dentro de la llamada a la función tr , se navega el archivo de idioma apropiado para el idioma del usuario y se recupera el mensaje traducido correspondiente a "Password:" para el idioma del usuario y se utiliza como etiqueta . La determinación / definición del lenguaje es un mecanismo separado que esencialmente obtiene / establece una variable global / estática, la que se busca cuando la función tr se llama en el ejemplo anterior. Lo que puede ser manejado especialmente por cada plataforma son las formas plurales (traducción condicional basada en algún parámetro). En Yii, por ejemplo, podría haber 'n==1#one book|n>1#many books' como la cadena de traducción. En tu aplicación Yii::t('app', 'n==1#one book|n>1#many books', 1); , Es decir, también proporcionará el número real como un parámetro, de manera que se pueda usar el formato correcto (el parámetro 'app' utilizado en la función de traducción se refiere a una categoría de traducción específica denominada app , ya que, en todos los idiomas, Utilice diferentes categorías de traducción para partes de su aplicación).

Para añadir una idea final, el uso de un backend común genérico para traducciones le permitiría reutilizar la gran mayoría de sus cadenas traducidas, al migrar de un framework a otro, o incluso si existen múltiples implementaciones diferentes para la misma aplicación en Al mismo tiempo, por ejemplo, una aplicación basada en navegador existe junto con una aplicación nativa. Los formularios plurales requerirían un manejo especial y traducciones separadas para la misma cadena de lenguaje debido a que son realmente específicos de la plataforma (pero, si es necesario, la mayoría de las formas plurales pueden eliminarse moviendo la condición del dominio de cadena de traducción al dominio de código). Pero la gran mayoría de las traducciones en una aplicación son asignaciones directas de una cadena a otra. Algunos frameworks, como Qt, tienen herramientas para escanear los archivos de origen y actualizar archivos de traducción basados ​​en nuevos usos de la función de traducción especial ( tr en Qt). Si existe tal herramienta para el marco de su elección, no necesitará agregar una asignación de traducción manualmente a un archivo de traducción. Después de escanear los archivos de origen, la asignación aparecería en los archivos de traducción, por defecto a la cadena original como su traducción y en espera de la cadena traducida para reemplazarlo. Investigue los posibles flujos de trabajo antes de comprometerse con un enfoque.

  • PayPal Mobile Express - "El pago no se puede realizar con un dispositivo móvil"
  • Cómo crear un Webapp para iOS, Android, BBerry, Symbian
  • Aplicación Web sin conexión HTML5 en Android
  • ¿Cómo manejar varios marcadores en Google Maps con la misma ubicación?
  • Enlace a Apple Wallet o Android Pay desde una aplicación web MVC
  • Phonegap - Córdoba es lenta y lenta en dispositivos Android y iOS
  • Cordova androide splashscreen están distorsionados
  • Escanea tarjetas de negocios con Phonegap
  • Convertir Java a iOS
  • Android equivalente de NSUserDefaults en iOS
  • Xamarin iOS localización utilizando .NET
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.