Ansel utiliza Gettext para traducir todas las partes del proyecto:
- La aplicación del software (escrita en C),
- El sitio web (plantillas Hugo y contenido Markdown),
- La documentación/manual de usuario, insertado en el sitio web como un módulo (plantillas Hugo y contenido Markdown también).
Esto asegura que se pueda utilizar el mismo flujo de trabajo para traducir todos los archivos, pero también que algunas cadenas traducidas se puedan compartir (por ejemplo, los controles GUI traducidos de las aplicaciones se pueden insertar directamente en la documentación).
Organización de archivos de traducción
El código fuente del sitio web, documentación y software contiene un subdirectorio inmediato po/
, que contiene:
- un archivo
.pot
que contiene todas las líneas disponibles, traducibles en su idioma original (en inglés), - muchos archivos
.po
que coinciden con las cadenas traducibles en su idioma original con su traducción (un archivo por idioma).
Los archivos de traducción están todos nombrados siguiendo la convención código-de-idioma.po
. Por ejemplo:
- para alemán,
- la traducción del software es
de.po
, - la traducción del sitio web es
content.de.po
, - la traducción de la documentación es
content.de.po
,
- la traducción del software es
- para portugués brasileño,
- la traducción del software es
pt_BR.po
, - la traducción del sitio web es
content.pt_br.po
, - la traducción de la documentación es
content.pt_br.po
.
- la traducción del software es
Traducir cuando no puedes usar CLI/Git
Necesitarás localizar el archivo .po
relevante para tu idioma para la parte del proyecto que deseas traducir:
- el software: https://github.com/aurelienpierreeng/ansel/tree/master/po
- el sitio web: https://github.com/aurelienpierreeng/ansel-website/tree/master/po
- la documentación: https://github.com/aurelienpierreeng/ansel-doc/tree/master/po
- Descarga este archivo y ábrelo con Poedit ,
- Realiza las correcciones y ediciones necesarias,
- Agrega tu nombre en un comentario para las cadenas que traduzcas si deseas ser acreditado en la página:
- Las cadenas traducidas automáticamente tendrán
TRANSLATOR ChatGPT
allí, una vez que verifiques esas cadenas, por favor elimina esta línea, - Luego agrega un comentario que contenga
TRANSLATOR Tu Nombre
en una nueva línea. Mantén a otros contribuyentes (que no sean ChatGPT) allí, si los hay.
- Las cadenas traducidas automáticamente tendrán
- Guarda el archivo y:
- Alternativa 1 (más fácil para el colaborador, más pasos para el mantenedor): déjalo en mi nube privada ,
- Alternativa 2 (más pasos para el colaborador, más fácil para el mantenedor): compromételo con Git y abre una solicitud de extracción contra el repositorio adecuado de Github.
Translating for power users
Esto actualizará el archivo .pot
usando el código fuente del proyecto. Necesitarás tener Git
instalado, y Hugo 0.146 instalado en tu computadora.
- Clona el código fuente del proyecto relevante:
- el software:
- el sitio web:
- la documentación:
1$ git pull
- el software:
- Actualiza el archivo
.pot
y todos los archivos.po
desde el código fuente (este paso funciona igual para los 3 proyectos):1$ sh tools/update-translations.sh
- Traduce el archivo
.po
relevante usando Poedit o directamente en un editor de texto (ver Traducir cuando no puedes usar CLI/Git), - Prueba y revisa tu traducción:
- Para el software, necesitarás compilar Ansel en tu SO. Por favor, consulta la documentación.
- Para el sitio web y la documentación, puedes ejecutar:
\n
que no coinciden, y errores de Hugo, especialmente con respecto a la sintaxis de shortcodes. - Para el sitio web y la documentación, limpia los archivos Markdown traducidos (generados automáticamente por po4a usando el archivo
.po
) antes de comprometer, usando:1sh tools/build-translations.sh --remove
- Compromete todos los archivos
.pot
y.po
y abre una solicitud de extracción contra el repositorio de Github relevante. Nunca comprometa archivos.md
(Markdown) traducidos.
Translating images
Lo siguiente se aplica solo al sitio web y a la documentación.
Las imágenes también se pueden traducir, por ejemplo, capturas de pantalla de aplicaciones. Las imágenes se almacenan en la carpeta assets/
si se reutilizan en varias páginas (recursos globales), de lo contrario, se almacenan en la misma carpeta que el archivo Markdown que las usa (recursos locales). Tanto si son globales como locales, el proceso de traducción es el mismo, solo cambia la carpeta base.
Si, por ejemplo, deseas traducir el assets/screenshot.jpg
para el idioma LANG
(que es el código ISO del idioma, como de
, nl
, pt_br
, zn_cn
, etc.):
- agrega y compromete un nuevo archivo de imagen
assets/screenshot.LANG.jpg
al repositorio de Git de documentación o del sitio web, - en el
content.LANG.po
, localiza la entrada que contiene la etiqueta Markdown de la imagen original, que será algo como
, - traduce la etiqueta Markdown reemplazando la URL de la imagen, como
. Esto requiere un intérprete de Python y el paquete regex
(instalar con pip install -U regex
). Desde el código fuente de la documentación, puedes llamar:
1$ python tools/merge-translations.py path/to/software path/to/doc
Traducción automática de documentación y sitio web con ChatGPT
ChatGPT-4o hace un trabajo bastante justo al traducir texto formateado en Markdown desde el inglés, aunque no en todos los idiomas. Necesitarás una clave API privada para almacenar en la carpeta de documentación o sitio web en un archivo .chatgpt.api_key
. Luego, las llamadas a la API de ChatGPT no son gratuitas, y el pago mínimo de 5 US$ te dará aproximadamente el sitio web completamente traducido en 4 idiomas.
El script todo en uno se puede llamar usando:
1$ sh auto-translate.sh LANG
donde LANG
es el código del idioma de destino (de, fr, pt_br, etc.). Esto procesará la traducción en lotes de 90 a 120 cadenas para cumplir con las limitaciones y umbrales de la API de ChatGPT. Esto:
- analizará el archivo original
po/content.LANG.po
y exportará el lote a traducir en un archivo temporalpo/content.LANG.txt
, - enviará el archivo
po/content.LANG.txt
a ChatGPT y obtendrá la respuesta enpo/content.LANG.generated.txt
- solucionará la mayoría de las inconsistencias de formato comunes que ChatGPT puede introducir e inyectar las traducciones de nuevo en
po/content.LANG.po
, - construirá archivos Markdown traducidos (siguiendo la convención de nomenclatura
página.LANG.md
), - construirá el sitio web con Hugo.
Si todos estos pasos se completan sin errores, entonces estarás bien para ejecutar el script nuevamente para procesar el siguiente lote hasta la finalización. Si se muestran errores, necesitarás corregirlos. Solo ejecutamos un lote en cada llamada para darle al usuario la oportunidad de encontrar errores mientras no hay demasiados cambios para inspeccionar.
Errores comunes:
- nada se traducirá: verifica la respuesta de ChatGPT dentro de
po/content.LANG.generated.txt
, a veces no puede entender su misión. Puedes intentar nuevamente, a veces funciona en la tercera llamada. Pero a menudo, no hay nada que hacer y algunos idiomas/cadenas no se pueden traducir en absoluto. - al construir el sitio web con Hugo, algunos shortcodes no se pueden encontrar. Esto se debe a que los shortcodes se declaran así:
{{< nombre_del_shortcode >}}
. A veces, ChatGPT intentará traducirnombre_del_shortcode
y el shortcode ya no funcionará. La solución es recuperar el nombre en inglés para el shortcode y sus atributos, - lo mismo con los gráficos Mermaid , ChatGPT puede intentar traducir comandos y propiedades que no deberían ser traducidos,
- las cadenas originales terminan con el carácter de nueva línea
\n
y las cadenas traducidas no (o viceversa). El script intenta sanear eso, pero algunos casos extremos no se manejan. Las cadenasmsgid
originales y su traducciónmsgstr
en el archivo.po
deben tener el mismo número de caracteres\n
en los mismos lugares, - comillas dobles mal escapadas: las cadenas Gettext
msgid
ymsgstr
deben estar delimitadas por comillas dobles no escapadas"
en cada extremo de la cadena. Cualquier otra comilla doble, dentro de la cadena Gettext, debe escapar usando\"
.
La mejor manera de corregir errores es abrir el archivo .po
relevante en un editor de texto. Si no puedes encontrar y resolver el error, puedes intentar abrir el archivo en Poedit, pero al guardar, generalmente borrará completamente las cadenas defectuosas sin corregirlas, por lo que la traducción deberá comenzar de nuevo desde cero.
Construir archivos Markdown traducidos
Para el sitio web y la documentación, Hugo maneja las traducciones de cualquier página dada new_page.md
usando la convención de nombres new_page.LANG.md
, donde LANG
es el código del idioma. Hugo admite nativamente escribir manualmente estos archivos traducidos en la misma carpeta que su original, sin embargo, aquí los generamos usando el archivo de traducción .po
y el programa po4a
. Los scripts build-modules.sh
y tools/auto-translate.sh
manejan esto internamente, pero puedes querer generar esos archivos manualmente:
- Actualiza los archivos
.pot
y.po
con el código fuente:1$ sh tools/update-translations.sh
- Crea los archivos
.md
traducidos:1$ sh tools/build-translations.sh --add
- Limpia los archivos
.md
traducidos:1$ sh tools/build-translations.sh --remove
Es importante no comprometer nunca los archivos .md
traducidos con Git, ya que se regeneran solo por ese script al construir el sitio web. Esto es solo por la higiene del repositorio, no hay inconveniente técnico. Limpiar los .md
traducidos antes de comprometerse asegura que no haya errores.
¿Perdido en la traducción?
Si tienes problemas o preguntas, no dudes en preguntar en el canal de traductores de Matrix dedicado.
Notas para traductores
Política sobre mayúsculas
El proyecto darktable dio prioridad a poner todo en minúsculas, lo que hace que la GUI sea difícil de leer, especialmente para las herramientas que tienen varias oraciones. Las mayúsculas anclan visualmente el comienzo de oraciones y otros textos importantes, como botones, controles, etc. No es casualidad si todos los idiomas convergieron en usarlas (aunque el alemán tiene su particular manera de ponerlas en todas partes), ayudan a la legibilidad tanto si te gusta su estética o no.
El código fuente de Ansel reutiliza la mayoría de las etiquetas de darktable y agrega una mayúscula inicial en la mayoría de los lugares donde se necesitan (encabezados de los módulos, botones). Esto se hace mediante un poco de código usando la función C g_unichar_toupper()
de Gtk Glib, de modo que el texto original en inglés permanezca en minúsculas para mantener la compatibilidad con las traducciones.
Esta solución programática funciona para caracteres no acentuados, sin importar el idioma utilizado (cadenas predeterminadas en inglés, o traducciones). Sin embargo, no funciona para caracteres iniciales acentuados, que no se capitalizarán. En este caso, se pide a los traductores que fuercen su traducción para usar caracteres acentuados iniciales en mayúscula siempre que sean gramaticalmente correctos en su idioma.
Las nuevas etiquetas o las etiquetas antiguas recientemente cambiadas (lo que rompería las traducciones de todos modos) obtendrán mayúsculas iniciales de ahora en adelante, en el código fuente (versión en inglés), por lo que esto debería arreglarse progresivamente.
Traducción de términos técnicos
Términos técnicos relacionados con la teoría del color y la colorimetría deben traducirse exactamente del inglés, con mucho cuidado porque estos términos pueden existir también en lenguaje común (es decir, no técnico) pero con un significado diferente. La Comisión Electrotécnica Internacional proporciona un motor de búsqueda donde puedes buscar los términos técnicos en inglés y obtener las traducciones precisas en diferentes idiomas, incluidos los principales europeos así como el árabe y el chino.
Notas para los traductores francófonos
La traducción de darktable tiene rarezas incomprensibles para cualquiera que haya usado una computadora de escritorio durante más de 10 años. Aquí hay una lista rápida de errores a corregir:
- ‘set’ se traduce como ‘positionné’ pero su traducción correcta es ‘réglé’. Es ilógico porque ‘settings’ se traduce correctamente como ‘réglages’. En Ansel, solo se posicionan máscaras (o sus nodos de control) en el plano 2D. El resto son ajustes.
- ‘reset’ se traduce como ‘repositionné’ pero su traducción correcta es ‘réinitialiser’.
- En inglés, un gran número de verbos tienen la misma grafía para su infinitivo y su participio pasado, e incluso existe como sustantivo (‘set’, en el ejemplo arriba, puede ser traducido como ‘fijado’ o ‘ajustar’ o como ‘conjunto’ en su forma substantivada). Si se requiere una acción (aún no realizada), en francés se debe usar el infinitivo. Si una acción ya está hecha, se debe usar el participio pasado. Las cosas se complican para los sustantivos porque el inglés no siempre requiere un determinante delante, por lo que hay que deducirlo del contexto. A observar: ‘click’ (hacer clic o clic), ’type’ (tipo o escribir/teclear), etc.
Translated from English by : ChatGPT. In case of conflict, inconsistency or error, the English version shall prevail.