Traducir archivos gettext .po
Un archivo .po usa texto como clave: la frase en inglés es la clave. Contextos, formas plurales y variables al estilo Python se sitúan alrededor de ese texto. KAERIS los conserva y escribe las formas plurales que el idioma destino necesita.
KAERIS ha traducido esta página y revisado cada línea traduciéndola de vuelta. Un hablante nativo aún no la ha revisado. Original en inglés
Cómo se construye un archivo .po
Cada entrada tiene un msgid (el texto fuente) y un msgstr (la traducción). msgctxt distingue dos frases idénticas. Los plurales usan msgid_plural y un msgstr[n] por forma, y la línea Plural-Forms del encabezado indica cuántas formas tiene el idioma.
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: app/views.py:12
msgid "Welcome back, %(name)s!"
msgstr ""
#: app/views.py:20
msgid "%(count)d file"
msgid_plural "%(count)d files"
msgstr[0] ""
msgstr[1] ""
msgctxt "menu"
msgid "Open"
msgstr ""
msgctxt "verb"
msgid "Open"
msgstr ""
Qué tener en cuenta en las traducciones .po
El contexto cambia la palabra
“Open” como elemento de menú y “Open” como verbo se traducen diferente. KAERIS lee el contexto junto con el texto y lo señala cuando la misma palabra fuente se traduce de dos maneras. En la ejecución real abajo ambas se tradujeron como “Öffnen”, que es correcto en alemán, y los contextos permanecieron en el archivo.
Las formas plurales varían según el idioma
El inglés tiene dos, el ruso tres, el árabe seis. En una ejecución con ruso el encabezado se convierte en
nplurals=3y cada entrada plural tiene tresmsgstr.Variables en estilos Python y C
%(name)s,%d,{name}deben permanecer sin cambios, o la aplicación lanzará un error en tiempo de ejecución.El encabezado y las referencias
El encabezado se reconstruye con el idioma y la regla plural. Los comentarios de referencia fuente (
#:) no se incluyen en el archivo traducido.
Una ejecución real: traducido al alemán y verificado
Una ejecución real, 27 de octubre de 2026, sin ediciones manuales: kaeris translate en.po --langs de con kaeris 0.2.35, 3.9 segundos, modelo google/gemini-2.5-flash-lite, el predeterminado del nivel gratuito. Abajo, el archivo alemán que generó y lo que kaeris check dice sobre él.
# Generated by KAERIS i18n Tool # Language: de msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "Language: de\n" msgid "Welcome back, %(name)s!" msgstr "Willkommen zurück, %(name)s!" msgid "%(count)d file" msgid_plural "%(count)d files" msgstr[0] "%(count)d Datei" msgstr[1] "%(count)d Dateien" msgctxt "menu" msgid "Open" msgstr "Öffnen" msgctxt "verb" msgid "Open" msgstr "Öffnen"
$ kaeris check --source en.po --langs de ✓ de: complete & placeholder-safe ✓ all locales complete & placeholder-safe
Lo que KAERIS hace con él
Entradas y contextos conservados
Las claves de texto,
msgctxty pares plurales regresan en el mismo orden.Formas plurales según el idioma destino
El número de
msgstr[n]sigue el idioma, comprobado en una ejecución con ruso.Chequeo gratuito para este formato
El chequeo gratuito en /check lee este formato y funciona sin clave ni cuenta. El comando de terminal
kaeris checktambién lo lee: soporta los 13 formatos desde kaeris 0.2.35, con las mismas reglas y sin enviar nada a ningún lado.
Ejecuta en tres pasos
Instala el CLI
Ejecuta
pip install kaeris.Traducir el catálogo
Ejecute
kaeris translate django.po --langs de,ja. Los archivos de salida se nombran por idioma.Verificar el resultado
Suba el archivo fuente y un .po traducido en la página de verificación gratuita para detectar variables perdidas y términos inconsistentes.
pip install kaeris kaeris translate locale/en/LC_MESSAGES/django.po --langs de,ja --verify
Preguntas
¿Maneja formas plurales para ruso o árabe?
El encabezado plural y el número de espacios msgstr[n] se escriben según el idioma destino. En una ejecución con ruso el ejemplo produjo nplurals=3 y tres espacios.
¿Y qué pasa con msgctxt?
El contexto permanece adjunto a la entrada, por lo que dos fuentes idénticas con contextos diferentes son cadenas separadas. La verificación avisa cuando se traducen de forma distinta.
¿Es gratis?
Sí, sin cuenta: 10.000 caracteres por archivo y hasta 8 idiomas por ejecución. Una clave API gratuita eleva el límite de archivos a 50.000 caracteres. La licencia vitalicia cuesta $79 una vez, con tu propia clave OpenRouter; los planes mensuales empiezan en $19. Precios
¿Puedo ejecutarlo desde la terminal o en CI?
Sí. pip install kaeris, luego kaeris translate django.po --langs de,ja. Véase también Django. El GitHub Action ejecuta la misma traducción en un pull request. Documentación CLI · GitHub Action
Seguir adelante
Referencia CLI · Referencia de verificación · Traducir en el navegador · Verificación gratuita · Convertir formatos · Pseudo-localización
Otros formatos: JSON · YAML · ARB · XLIFF · .strings · .xcstrings · .properties · .resx · CSV · Markdown · Fluent · Android XML