Translation into Spanish of an interesting article by Dima Enns, a Russian software developer located in Germany. Dima shares with us his strategy to localize apps easily through a clever use of localization files categorization, and the help of 2 small apps he has developped to manage and combine these files. Good job!
A free translation by Chema, a Spain-based translator specializing in translating software and apps from English into Spanish.
An original text written by Dima Enns, originally published in
https://dev.to/yeah69/the-road-to-localization-in-an-open-source-project-1o09
* * *
Optar por traducir y localizar mi proyecto de código abierto (OS) me ha obligado a aprender mucho y superar algunos problemas. En esta entrada del blog me gustarÃa describir exactamente esto.
Hay muchas cuestiones que dificultan la localización de un programa de software:
Este es un gran reto incluso para empresas de software. En mi caso solo soy yo, frente a mi proyecto como desarrollador recreativo de código abierto, planteándome si debo traducirlo y localizarlo, o no. Para los proyectos de código abierto (especialmente los pequeños como el mÃo) el obstáculo es aún mayor, debido a la falta de recursos. Es una lástima, porque muchas aplicaciones de código abierto podrÃan ser relevantes para aquellos que, al mismo tiempo, no pueden permitirse alternativas comerciales y no saben inglés ni otros idiomas comúnmente localizados. Es decir, donde el beneficio parece grande, el obstáculo es aún mayor. Para contarlo me gustarÃa hacer un pequeño recorrido por la historia de mis experiencias en la localización de mi proyecto de SO.
En primer lugar, un pequeño disclaimer. Nacà en Rusia y vine a Alemania cuando tenÃa seis años. Eso significa que hablo 3 idiomas: Alemán, Inglés y algo de Ruso (clasificados por nivel).
Y ahà me tienes, empezando mi proyecto OS, destinado a la contabilidad privada (todavÃa “bastante poco maduro” para su lanzamiento, por desgracia). Se supone que debe ayudar a la gente a tener sus finanzas bajo control. La gente que no tiene problemas de dinero no necesita depender de él. Por esto tiene que ser gratuito. También debe poder llegar al mayor número de personas posible. Asà que también debe servir a los que no saben hablar inglés. Por tanto, la pregunta “Localizaciones sà o no?” se responde asà con un claro “¡Por supuesto que sÃ!”
Al principio decidà traducir y localizar sólo en Inglés y Alemán, porque estos idiomas eran lo suficientemente buenos para mis necesidades. El Ruso no me atrevà a hacerlo, porque nunca fui a la escuela en Rusia y, por tanto, estaba muy lejos de dominar la terminologÃa. Esto demuestra por sà solo que, cuando trabajas en un proyecto tú solo, solo puedes ocuparte de la localización hasta donde llegan tus habilidades. Y las mÃas, por desgracia, son muy limitadas. Demasiado limitadas. Sin embargo, esto me obligó a estructurar bien el código para su mejor localización / traducción, por lo que para otros idiomas “sólo” hay que traducir los textos existentes.
Para más idiomas necesitaba ayuda y la busqué. La encontré en mi tÃa. Ella también nació en Rusia y trabaja en el campo de las finanzas. Perfecto. Además, en ese momento tenÃa una novia húngara, que por suerte aceptó ayudarme (Szia, magyarország. Hogy vagy?). TenÃa su OK, pero aún asà dudaba si debÃa aprovechar su ayuda. El programa debÃa estar en un estado de desarrollo óptimo. TenÃa muy claro que no querÃa dejar que estos ayudantes de traductores, muy queridos para mÃ, trabajaran innecesaria y regularmente de forma totalmente gratuita. TenÃa un mal presentimiento al respecto.
Al final decidà aprovechar la oportunidad y traducir mi proyecto a cuatro idiomas (de un total de 7.111 idiomas, según la wikipedia). SÃ. Y luego, consciente o inconscientemente, procrastiné con funciones que necesitaban nuevos textos. Preferà ocuparme de otras cosas que no requerÃan nuevos textos, lo cual no es malo per se, pero inhibe el desarrollo del verdadero propósito del proyecto. Cuando empecé de nuevo con las nuevas funciones, puse los valores en Inglés en las localizaciones en Ruso y Húngaro como placeholders para los nuevos textos. Esto es lo que ocurrió con el proyecto hasta hace unas semanas, cuando desarrollé una nueva solución para mÃ. No me apetecÃa preguntar a mi tÃa. Y la relación con mi novia húngara de entonces habÃa terminado.
He resuelto (la mayorÃa) de los problemas que tenÃa con las localizaciones con la ayuda de 2 proyectos. Son 2 desarrollos muy especializados diseñados para C#/WPF/DeepL. Si trabajas C#/WPF/DeepL, pruébalos! Estoy deseando recibir comentarios. Los detalles técnicos se encuentran en las wikis de los respectivos proyectos (MrMeeseeks.ResXTranslationCombinator / MrMeeseeks.ResXToViewModelGenerator). Puedes echar un vistazo si estás interesado. Los conceptos pueden ser fácilmente reutilizables para su aplicación a otros proyectos similares.
Desgraciadamente, no puedo saltarme una breve y escueta definición de la terminologÃa, asà que, cuanto antes mejor!
En mis proyectos distingo 4 categorÃas de archivos de localización:
Ahora una descripción aproximada de los dos proyectos y lo que hacen:
Estar´Ãa encantado de seguir esta tortura con más detalles de concepto y experiencias personales sobre estos proyectos, per intentaré contenerme…
El TranslationCombinator se implementa como un paso de una acción de Github. Si sigues el flujo de trabajo -documentado y recomendado en el repositorio-, el paso reacciona tan pronto como se realizan cambios en los archivos de localización. A continuación, utiliza el servicio de traducción (yo elegà DeepL; ten en cuenta que necesitas una cuenta para acceder a la API de DeepL) para crear o complementar los archivos automáticos. Después, teniendo en cuenta los archivos que se anulan, se crean o complementan los archivos combinados. Por último, pero no por ello menos importante, se crea un pull request si el proceso dio lugar a cambios en los archivos.
Lo ideal es que los desarrolladores sólo tengan que hacer cambios en el archivo por defecto en cuanto necesiten nuevas localizaciones. Lo ideal es que los traductores no tengan que intervenir. Sin embargo, pueden proporcionar anulaciones (override) a las localizaciones cuando surja la necesidad. Todo lo demás lo hace el TranslationCombinator. Esto también permite una colaboración completamente asÃncrona entre los desarrolladores y los traductores.
Opciones interesantes:
Los archivos de localización tienen un formato XML que no está diseñado para su uso directo en proyectos MVVM. Aquà es donde el ViewModelGenerator ayuda. Toma el archivo por defecto y los archivos combinados y genera un conjunto de interfaces y clases ViewModel a partir de ellos. Éstas pueden ser leÃdas directamente desde los elementos de las capas View y ViewModel. También proporcionan una forma cómoda y eficaz de cambiar de idioma en tiempo de ejecución.
He creado un tercer repositorio. Éste es sólo un proyecto de ejemplo que utiliza los otros dos proyectos en combinación. Si quieres ver un ejemplo completo en acción, no dudes en echarle un vistazo. Ten en cuenta que me he centrado en el proceso de localización. Esto significa que el resto del código no está a la altura de mis estándares habituales. Aquà hay una pequeña animación del resultado (paso por todos los idiomas una vez “lentamente” y luego unas cuantas veces a toda velocidad):
También puedes echar un vistazo al nuevo flujo de trabajo de localización en el ya mencionado proyecto de afición a la contabilidad (Proyecto BFF).
¿Se han resuelto ya todos los problemas de localización? No, desde luego que no. Pero estamos dos pasos más cerca del objetivo de minimizar el esfuerzo humano. Ahora no tengo que cargar a mi tÃa y a mi ex novia con más trabajo. SÃ. Lo mejor es que automáticamente se genera una localización base y los traductores son siempre bienvenidos a contribuir si lo desean. No se presiona a nadie para que se encargue de las localizaciones, pero quien quiera tiene la oportunidad de participar activamente. En mi opinión, esto vale su peso en oro para un proyecto de código abierto.