Traducir archivos de recursos .resx de .NET
Un archivo .resx mezcla texto con iconos y otros recursos tipados en un XML. KAERIS traduce solo las cadenas, deja el resto byte a byte y verifica los elementos de formato {0}.
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 .resx
Un XML <root> con entradas <data name="…"><value>…</value></data>. Una entrada con atributo type o mimetype (un icono, una imagen) no es texto. Nombres como SaveButton.Text son propiedades de controles de WinForms.
<?xml version="1.0" encoding="utf-8"?>
<root>
<resheader name="resmimetype"><value>text/microsoft-resx</value></resheader>
<data name="WelcomeMessage" xml:space="preserve">
<value>Welcome back, {0}!</value>
<comment>{0} is the user's first name</comment>
</data>
<data name="ItemsInCart" xml:space="preserve">
<value>You have {0} items in your cart.</value>
</data>
<data name="SaveButton.Text" xml:space="preserve">
<value>Save and close</value>
</data>
<data name="AppIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\app.ico;System.Drawing.Icon, System.Drawing</value>
</data>
</root>
Qué tener en cuenta en las traducciones .resx
Las entradas tipadas no son texto
La entrada
AppIconen la ejecución real abajo es una referencia a archivo. Se copia al resultado sin cambios y nunca se envía para traducción.Elementos de formato
{0}enstring.Formatdebe mantenerse; en la ejecución real abajo ambos estaban presentes, y la ausencia de uno se reportaría.Las claves no son texto
Nombres como
SaveButton.Textson propiedades de controles de WinForms. Son claves: se mantienen tal cual, nunca se traducen.Los comentarios permanecen en el origen
<comment>no se incluyen en el archivo traducido. Mantenga las notas para traductores en el recurso fuente.
Una ejecución real: traducido al alemán y verificado
Una ejecución real, 27 de octubre de 2026, sin ediciones manuales: kaeris translate Strings.resx --langs de con kaeris 0.2.35, 2.6 segundos, modelo openai/gpt-4.1-mini (el modelo de reserva del servicio respondió este trabajo). Abajo, el archivo alemán que generó y lo que kaeris check dice sobre él.
<?xml version="1.0" encoding="utf-8"?>
<root>
<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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="WelcomeMessage" xml:space="preserve">
<value>Willkommen zurück, {0}!</value>
</data>
<data name="ItemsInCart" xml:space="preserve">
<value>Sie haben {0} Artikel in Ihrem Warenkorb.</value>
</data>
<data name="SaveButton.Text" xml:space="preserve">
<value>Speichern und schließen</value>
</data>
<data name="AppIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\app.ico;System.Drawing.Icon, System.Drawing</value>
</data>
</root>
$ kaeris check --source Strings.resx --langs de ✓ de: complete & placeholder-safe ✓ all locales complete & placeholder-safe
Lo que KAERIS hace con él
Solo cadenas
Las entradas tipadas y binarias se preservan literalmente, como en la ejecución real arriba: la entrada
AppIconvolvió sin cambios.DTD y entidades rechazadas
Los archivos con declaración DOCTYPE o de entidad son rechazados antes del análisis, una protección compartida con XLIFF y Android XML.
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 archivo de recursos
Ejecute
kaeris translate Resources/Strings.resx --langs de,ja.Verificar el resultado
Suba el archivo fuente y el .resx traducido en la página de verificación gratuita.
pip install kaeris kaeris translate Resources/Strings.resx --langs de,ja --verify
Preguntas
¿Se modifican los iconos y otros recursos tipados?
No. Las entradas con atributo type o mimetype se mantienen literalmente.
¿Se conservan los elementos ?
No: el archivo traducido se escribe sin ellos. Su archivo fuente los conserva.
¿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 Resources/Strings.resx --langs de,ja. 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 · .po · ARB · XLIFF · .strings · .xcstrings · .properties · CSV · Markdown · Fluent · Android XML