La localización de juegos comienza con un archivo que tu motor ya ha escrito por ti, y el objetivo es enviar ese archivo a un lugar que lo lea tal cual. Unity te ofrece XLIFF o CSV. Unreal te ofrece PO. Godot ofrece cualquiera de los dos. Ninguno de ellos necesita ser reformateado primero.
Esta guía es la versión detallada: qué implica realmente la localización de juegos, por qué es rentable, qué archivo te entrega cada motor, qué puedes y qué no puedes pedir según el formato de ese archivo, cómo ejecuta el trabajo la plataforma hoy en día y cómo delegar todo el ciclo a un agente de IA para que una revisión en diez idiomas sea una sola decisión en lugar de cuarenta clics.
Qué implica realmente la localización de juegos
La localización son cuatro tareas distintas que la gente resume en una sola palabra, y saber en cuál te encuentras evita la mayoría de los problemas.
1. Internacionalización, que es código, no idioma. Tu juego debe ser capaz de mostrar otro idioma: nada de texto incrustado en una textura, nada de frases ensambladas mediante concatenación de cadenas, una fuente con los glifos necesarios y diseños que soporten el crecimiento de una etiqueta. Cada motor tiene un sistema para esto, y el sistema de cada motor es donde terminan viviendo las cadenas.
2. Extracción, que la realiza el motor. Unity recopila tu texto en String Table Collections. El Localization Dashboard de Unreal lo reúne en un objetivo y lo exporta. Godot lee una hoja de cálculo o un catálogo de gettext. El resultado de este paso es el archivo que vas a traducir.
3. Traducción, que es la parte de la que trata este artículo. Un archivo de entrada, un archivo de salida, en el mismo formato.
4. Reimportación y pruebas. El archivo vuelve a su lugar de origen, se reconstruye el juego y alguien lee el menú principal en alemán para comprobar que nada se desborda.
El único paso que debe salir de tu motor es el tercero. Cualquier sistema que te pida reestructurar el archivo antes de poder traducirlo ha añadido una quinta tarea que nadie necesitaba.
Por qué localizar
Se trata de una cuestión de mercado, no de pulido. Un juego publicado en inglés es descubrible y jugable para las personas que leen inglés, y el resto del mundo es el resto del mundo.
La encuesta “Can’t Read, Won’t Buy” de CSA Research, realizada a 8.709 consumidores de 29 países, reveló que el 40% de los consumidores no comprará en sitios web en otro idioma, y que el 76% prefiere comprar productos con información en su propio idioma. Esta investigación trata sobre las compras online en general y no específicamente sobre juegos, que es precisamente por lo que merece la pena citarla aquí: la preferencia no es una peculiaridad del gaming, es cómo la gente compra cualquier cosa.
Otros tres efectos que importan especialmente para un juego, sin un número asociado a ninguno de ellos, porque no tenemos ninguno que merezca la pena publicar:
- Descubribilidad en la tienda. Una página de tienda en un idioma es rastreable en un solo idioma. Los títulos, las descripciones y las etiquetas son tres pantallas de texto frente a cuarenta horas de contenido.
- Reseñas y reembolsos. Un jugador que no puede leer un tutorial escribe sobre el tutorial.
- Alcance por unidad de trabajo. Tus sistemas, arte y audio ya están terminados. El texto es lo más barato de duplicar en tu proyecto.
Si tu juego tiene unos pocos cientos de cadenas, esto es un fin de semana de trabajo meticuloso en cualquier caso. A partir de unos pocos miles, la diferencia entre un flujo de trabajo y un hábito es el proyecto entero.
Cómo encaja esto frente a un sistema de gestión de traducciones
Los estudios grandes gestionan su localización a través de un TMS: memoQ, Phrase, Crowdin, Lokalise y similares. Son plataformas de coordinación. Albergan las cadenas, la memoria de traducción, los puestos de revisores, los estados del flujo de trabajo y las integraciones; para un equipo de veinte personas con proveedores externos, esa coordinación es el producto.
Si sois entre una y quince personas, ese no suele ser vuestro problema. No necesitáis puestos, estados ni gestión de proveedores. Necesitáis que las cadenas exportadas de esta versión se traduzcan bien, manteniendo intacto vuestro vocabulario inventado, antes de la entrega. Eso es un trabajo, no una plataforma.
Así que, para ser honestos: un TMS es donde un equipo grande organiza a las personas, y AI Glot es donde se traduce un archivo. Muchos equipos mantienen la exportación de su motor como la única fuente de verdad, la traducen aquí y hacen commit del resultado, sin ningún tercer sistema de por medio.
Qué exporta tu motor y qué leemos nosotros
AI Glot lee doce formatos: CSV, Excel, JSON y ARB, YAML, XLIFF, PO, Android XML, iOS .strings, Java .properties, .NET RESX, subtítulos SRT y archivos ZIP que contengan cualquiera de estos. Los dos formatos que los motores de juego utilizan realmente, el PO de Unreal y el XLIFF y CSV de Unity, son nativos. Ese es el objetivo de esta sección: no hay que exportar, convertir, traducir y volver a convertir.
Unity
El paquete de Localización exporta las colecciones de tablas de cadenas de tres maneras, y cualquiera de ellas funciona aquí.
XLIFF, en sus versiones 1.2 y 2.0, es el formato diseñado para esto. La documentación de Unity describe la exportación de colecciones de tablas de cadenas a uno o más archivos XLIFF, su edición en una herramienta externa y su posterior importación con las traducciones actualizadas, que es precisamente el ciclo completo. Envíalo al traductor de XLIFF y volverá con las mismas unidades y en el mismo orden.
El CSV es la otra opción de exportación y es más legible si quieres revisarlo visualmente. El CSV de Unity incluye una columna Key con la clave asignada, una columna Id con la id asignada por Unity y una columna por idioma en la tabla de strings. La variante “CSV with comments” añade una columna de comentarios por idioma, que sirve de contexto para el traductor y no debe traducirse. Esa distinción se aclara con una frase en tu instrucción, y para eso existe la página del traductor de CSV. Hay un recorrido completo de ambas exportaciones de Unity con la instrucción exacta que debes escribir para cada una.
Google Sheets es la tercera opción: el paquete sincroniza una colección de tablas de cadenas con una hoja de cálculo. Exporta esa hoja como CSV o XLSX y volverás al primer caso.
Unreal Engine
El Localization Dashboard de Unreal es un flujo de trabajo basado en PO. La propia documentación de Epic, en la página de herramientas de localización, recomienda usarlo “combinado con una herramienta de traducción externa (como Poedit, OneSky o XLOC)” para el trabajo de traducción real en lugar del editor integrado. AI Glot es esa herramienta externa, con la diferencia de que el archivo no necesita que un humano esté sentado frente a él.
Una entrada de PO tiene tres partes relevantes. La línea de contexto contiene la identidad de Unreal para esa entrada, construida a partir de su espacio de nombres y clave. El source es el texto en inglés. El espacio de traducción está vacío hasta que alguien lo rellena. Envía el archivo al traductor de PO y solo cambiará esa tercera parte.
msgctxt "QUEST_TURNIN_MAREN_01"msgid "Bring the sunken lantern back to Maren."msgstr ""msgstr "Rapporte la lanterne engloutie à Maren."Por eso msgctxt y msgid se tratan como estructura y no como texto. Si cambias cualquiera de los dos, Unreal no podrá encontrar la entrada o considerará que la traducción está obsoleta.
Godot y versiones móviles
Godot admite ambas rutas. Su documentación indica que tiene un importador que lee archivos CSV y que también admite la carga de traducciones escritas en el formato .po de gettext. Ambos son archivos que ya sabemos leer.
Si publicas en móviles, las cadenas de la tienda y de la plataforma son Android strings.xml e iOS .strings, y ambos tienen su propia herramienta gratuita: Android XML e iOS .strings. Los subtítulos de cinemáticas y tráilers son SRT, que sigue el mismo flujo de trabajo que traducir subtítulos de YouTube.
No pretendemos sustituir a Unity, Unreal, Godot o a una plataforma de localización. Procesamos lo que ellos exportan.
Una columna por idioma o un archivo por idioma
Esto es lo más importante que debes entender antes de escribir una instrucción, ya que determina qué puedes pedir exactamente.
- CSV y Excel: una columna por configuración regional
- JSON y YAML: claves hermanas, siempre que la estructura lo permita
- Puedes solicitar cuatro idiomas en una sola salida
- Puedes solicitar solo las filas cuya celda de destino esté vacía
- PO y XLIFF: cada entrada tiene un espacio de traducción
- Android XML, iOS .strings, .properties, RESX, SRT: un valor por clave
- Cuatro idiomas son cuatro trabajos y cuatro archivos
- El original nunca se sobrescribe; se rellena el espacio vacío
Por tanto, “traduce mi juego al francés, alemán, español y japonés” es un solo trabajo si tienes un CSV de Unity con cuatro columnas de idioma, y cuatro trabajos si tienes cuatro archivos PO de Unreal. Pedir a un formato de idioma único que contenga dos idiomas fallará, y fallará en la etapa de planificación en lugar de hacerlo silenciosamente, que es donde debe fallar.
Envío de una carpeta de archivos de idioma como un solo archivo
Un repositorio de juego no tiene un solo archivo de localización. Tiene un directorio por cultura, cada uno con el mismo nombre de archivo en su interior. Todo ese árbol se sube como un único ZIP, que es para lo que sirve el traductor de ZIP.
Es conveniente conocer los límites antes de crear el archivo: hasta 200 archivos, 20 MB para el archivo comprimido y 4 MB por archivo interno. Los archivos individuales más grandes no tienen problema, ya que sus límites son mucho más altos: 60 MB para CSV, 50 MB para XLSX, 12 MB para XLIFF, Android XML y RESX, 8 MB para JSON y 4 MB para PO, YAML, .properties, .strings y SRT.
Cada archivo del comprimido debe tener el mismo formato y la misma estructura, y por “misma estructura” nos referimos a algo específico según el formato:
- CSV: columnas idénticas y en el mismo orden.
- Android XML, iOS
.strings, Java.properties, RESX: un conjunto de claves idéntico. Un conjunto de carpetas por cultura cumple esto de forma natural, ya que se genera desde una única fuente. - XLIFF: misma versión y estructura de unidades. Cada archivo puede declarar un par de idiomas diferente, por lo que una exportación mixta de varios objetivos sigue siendo un solo archivo comprimido.
- PO: cualquier archivo PO, ya que la estructura de un catálogo es su propio formato.
Si un archivo comprimido no pasa la comprobación de estructura, se rechaza indicando la discrepancia en lugar de procesarse parcialmente.
Cómo funciona ahora una traducción
No hay pantalla de mapeo de columnas ni paso de configuración. Desde agosto de 2026 ya no existen modos fijos para elegir.
- Sube el archivo exportado por tu motor.
- Indica qué necesitas, en lenguaje sencillo. Una frase, o cinco.
- Revisa el plan. Muestra los idiomas, el alcance detectado, el recuento de palabras y el coste.
- Corrígelo si hay algún error. Este paso es gratuito y repetible.
- Aprueba. Este es el paso que consume créditos.
- Descarga un archivo, en el formato original.
La instrucción es texto libre y el motor la compila en código verificado. Por eso, las frases de alcance que ningún traductor automático puede expresar funcionan aquí: “solo las entradas cuya traducción esté vacía”, “solo las filas donde la columna de alemán todavía contenga el texto en inglés”, “traduce el diálogo y los nombres de los objetos, pero no toques los comentarios del desarrollador”.
Todo hasta el paso cinco es gratuito. Si un plan ha interpretado mal tu archivo, puedes corregirlo gratis, así que nunca hay motivo para dejarlo al azar.
Texto que debe encajar
Un botón que encaja en inglés se desborda en alemán. El texto traducido suele ser entre un 15 % y un 30 % más largo, y una interfaz diseñada para el ancho del inglés es una interfaz diseñada para el caso más corto.
La solución incorrecta es traducir primero y recortar después, lo que genera abreviaturas que nadie usaría. La solución correcta es indicar la restricción desde el principio, para que la línea se escriba para encajar:
Keep every UI label under 28 characters, including spaces. If the natural
translation is longer, choose a shorter phrasing rather than abbreviating.
Esto debe ir en las instrucciones a nivel de cadena, enviadas al aprobar, ya que un límite de caracteres describe algo visible dentro de una sola cadena. Pídelo una vez por archivo y se aplicará mientras se escribe cada etiqueta.
Hay dos cosas que esto no sustituye. Prueba las cadenas más largas en la versión final, porque un límite de caracteres no es una medida de píxeles de tu fuente. Y sé realista con el límite: 28 caracteres para un botón, no 28 caracteres para la descripción de una misión, o tendrás descripciones que parecen telegramas.
Las dos instrucciones que la gente confunde
Este es el único punto de todo el flujo de trabajo que puede fallar sin aviso, por lo que merece dedicarle treinta segundos.
La instrucción del plan decide qué se traduce. Se lee una sola vez, basándose en la estructura de todo el archivo, y es donde deben ir el idioma de destino y el alcance. “Traduce al alemán cada entrada cuya casilla de traducción esté vacía”.
Las instrucciones a nivel de cadena se aplican mientras se escribe cada cadena. En ese momento, el motor analiza una sola cadena, por lo que solo pueden describir lo que es visible en ella: un límite de caracteres, un registro, un marcador de posición como {count} que debe mantenerse tal cual, o un nombre que no debe traducirse.
Si pones un límite de caracteres en el plan, no servirá de nada. Si pones “omite la primera columna” o “traduce solo la segunda mitad del archivo” en el espacio de instrucciones a nivel de cadena, no pasará nada, porque en ese punto no hay un archivo a la vista. No habrá errores. Simplemente obtendrás un resultado que ignoró tus instrucciones.
Nombres, objetos y hechizos que no deben variar
El lore es lo que diferencia la traducción de videojuegos de todo lo demás. Un catálogo de productos tiene cien términos que deben permanecer fijos. Un juego tiene miles, son inventados y se repiten en miles de líneas y en cada actualización que lances durante los próximos tres años.
Añádelos una sola vez a un espacio de trabajo glosario: nombres de personajes, lugares, objetos y hechizos, la traducción oficial de una frase recurrente y los nombres que no deben traducirse en absoluto. Un glosario pertenece a un único par de idiomas y se captura en el momento de crear el plan, por lo que un lote en ejecución nunca cambiará sobre la marcha y el siguiente archivo utilizará los términos actuales.
Vale la pena revisar los límites del plan según tu lista de términos: un glosario con 50 términos en Free, tres con 150 en Starter, y glosarios ilimitados con 500 términos cada uno en Pro.
Y no tienes que escribir esa lista tú mismo. El glosario es accesible desde el servidor MCP, con herramientas para listar glosarios, leer uno, y añadir, cambiar o reemplazar términos. Así, un agente que ya tenga abierto tu proyecto puede encargarse de la parte tediosa: leer tus String Tables o tus archivos de diálogo, extraer los nombres propios y las palabras inventadas recurrentes, proponértelas en una lista y escribir las que apruebes en el espacio de trabajo antes de iniciar cualquier traducción.
Esto es más valioso de lo que parece. Un glosario que nadie rellena no protege nada, y completar uno a mano para un juego con mil términos inventados es precisamente la tarea que se pospone indefinidamente. Pide a tu agente que redacte un borrador y luego edita su lista en lugar de escribir una desde cero.
Esta es también la razón técnica por la cual un traductor automático general tiene dificultades con los videojuegos. Su glosario sustituye un término dondequiera que coincida, por lo que la frase que rodea la sustitución nunca se reconsidera y un sustantivo inventado con un género acaba en medio de una frase en francés que no concuerda con él. Aquí, el glosario se integra como significado mientras se escribe la línea, por lo que el término se flexiona según la frase. La misma diferencia se aplica al usar un asistente de chat para el trabajo: funciona bien para diez cadenas, pero no puede mantener una sola regla de forma fiable al llegar a la cadena 18.000.
Deja que un agente gestione el ciclo de localización de tu juego
Esta es la parte que la mayoría de los estudios aún no han adoptado. Existe una API REST, una herramienta de línea de comandos y un servidor MCP, por lo que un agente de programación puede ejecutar todo el ciclo sin que un humano tenga que abrir el navegador.
Instálalo e inicia sesión una vez:
npm install --global @ai-glot/cli
aiglot auth login
Eso abre el navegador para autorizar la máquina. En un servidor de compilación sin navegador, aiglot auth login --device activa el flujo de código de dispositivo, y aiglot auth login --key <key> funciona en CI.
- 1PrepararRecopila las exportaciones del motorTu agente, gratis
- 2CrearUn lote por archivoGratis
- 3Leer el planAlcance, palabras, costeGratis
- 4AprobarEl único paso que genera gastoTu decisión
- 5ResponderHacia las rutas por culturaTu agente
El prompt para entregar a tu agente
Pega esto, cambiando las rutas y la lista de idiomas. Está redactado para entregárselo a un agente, no para ejecutarlo tú mismo.
My Unreal project is at ~/dev/starfall. The Localization Dashboard exported
PO files to Content/Localization/Game/<culture>/Game.po, and their msgstr
lines are still empty.
Translate the French, German, Spanish and Japanese files with the aiglot CLI.
Read `aiglot batches create --help` and `aiglot batches approve --help` first
so you use the real flags, and run `aiglot languages` to confirm each language
tag before you start.
A PO file holds one target language, so create ONE batch per culture, four in
total. The source language is English: say so explicitly in every instruction
rather than letting it be inferred.
The plan instruction should translate only the entries whose msgstr is still
empty, and leave msgctxt, msgid and every placeholder or rich-text tag exactly
as written.
At approval, pass this as the string-level instruction: "Keep UI labels under
28 characters. Keep placeholders exactly as written. Do not translate any name
that appears in the glossary."
Show me all four plans, the total word count and the cost BEFORE you approve
anything, then wait for me to confirm.
After I confirm, approve with the lite quality tier, poll until each batch
reaches a terminal status, and download each result next to the original as
Game.translated.po. Do not overwrite the source files. Tell me if any batch
failed.
Cuatro elementos de ese prompt están haciendo el trabajo real, y son las partes que debes copiar en el tuyo.
Le indica al agente que lea la ayuda primero. Un agente que adivina los nombres de los flags falla en la primera llamada y luego inventa una razón plausible. Leer la ayuda real, o aiglot help --json para obtener todo el árbol de comandos a la vez, elimina ese problema.
Dice explícitamente un lote por cultura. Un agente que asuma un único trabajo con cuatro objetivos escribirá una instrucción que un archivo PO no puede cumplir, y gastarás un ciclo de plan en darte cuenta.
Nombra el idioma de origen. Sin ello, el origen se infiere del contenido, y esa inferencia es menos fiable precisamente donde más importa: etiquetas cortas de UI, archivos que ya contienen alguna línea traducida aislada y textos llenos de nombres inventados.
Pone un freno antes del gasto. aiglot batches approve es el único comando que consume créditos. Todo lo anterior es gratuito y repetible, por lo que pedir ver cuatro planes primero no cuesta nada. Esta propiedad es lo que hace que un ciclo de agente desatendido sea razonable en lugar de aterrador: un agente que no te entiende quema planes, no dinero.
Qué ejecuta realmente el agente
for pair in fr:French de:German es:Spanish ja:Japanese; do
code=${pair%%:*}
lang=${pair#*:}
po=~/dev/starfall/Content/Localization/Game/${code}/Game.po
# 1. Create the batch. Free. Returns the file and its plan.
id=$(aiglot batches create "$po" \
--instruction "The source language is English. Translate into ${lang} only the entries whose msgstr is still empty. Leave msgctxt and msgid exactly as they are, and keep every placeholder and rich-text tag untouched." \
--json | jq -r '.data.id')
# 2. Read the plan, still free.
aiglot batches get "$id" --json | jq '.data.plan'
# 3. Approve. The only step that spends credits.
aiglot batches approve "$id" --quality lite \
--instructions "Keep UI labels under 28 characters. Keep placeholders exactly as written."
# 4. Wait for a TERMINAL status, not for a specific one.
until status=$(aiglot batches get "$id" --json | jq -r '.data.status'); \
[ "$status" = "completed" ] || [ "$status" = "failed" ] || [ "$status" = "cancelled" ]; do
sleep 5
done
[ "$status" = "completed" ] && \
aiglot batches download "$id" --output "${po%.po}.translated.po"
done
Hay un detalle que merece la pena copiar aunque nunca traduzcas un juego. El ciclo espera cualquier estado de terminal en lugar de vigilar solo el estado completed. Un script que solo espera el estado deseado se quedará esperando eternamente ante un fallo, porque una comparación contra un valor que nunca llega no es un error. Simplemente es siempre falsa.
Si tu agente prefiere las herramientas a la shell, aiglot mcp sirve de puente con el servidor MCP. La CLI es el mejor punto de partida: funciona en un script, funciona en CI y puedes leer exactamente qué se ha ejecutado.
La otra mitad: un agente que solo prepara los archivos
La automatización total no es la única forma útil y, para una primera pasada, a menudo no es la adecuada.
Un agente es igual de valioso haciendo la parte aburrida y deteniéndose ahí. Pídele que recorra el repositorio, encuentre cada archivo de localización, informe qué culturas existen y qué entradas siguen sin traducir, y reúna todo en un único ZIP con un archivo por cultura. Después, sube tú mismo ese archivo, lee el plan, aprueba y deja que el agente coloque los resultados en las rutas correctas posteriormente. Esta división mantiene las dos decisiones en manos de la persona que debe tomarlas: por qué conjunto de idiomas estás pagando y si el plan es correcto, mientras deja que la máquina se encargue de la gestión de archivos, que es la parte genuinamente tediosa y propensa a errores. La página de soluciones de localización de juegos muestra el mismo proceso a través del navegador si prefieres verlo antes de automatizarlo con un script.
Dónde sigue siendo necesario un humano
No vamos a decirte que la traducción por IA sustituye a un traductor de videojuegos porque, específicamente para los juegos, no lo hace.
Úsalo para el grueso del trabajo. Cadenas de la interfaz, descripciones de objetos y equipo, tooltips, nombres de logros, notas del parche, el extenso volumen de diálogos ambientales y textos de ambientación. Este es el volumen que hace que los estudios pospongan la localización durante un año, y no requiere un esfuerzo extraordinario en una primera pasada.
Reserva la revisión humana para donde realmente aporte valor. La primera hora de juego, las voces de los personajes principales, cualquier elemento cómico o que rime. Una primera pasada más un revisor es un uso eficiente de un experto y evita que pierda una semana entera sumergido en archivos.
Contrata directamente a un especialista para la página de la tienda y el tráiler, que son los dos textos que deciden si alguien llegará a ver el resto.
La razón por la que esta división funciona es que el volumen y la importancia no están correlacionados, y una vez que lo ves, la decisión del presupuesto es obvia. La página de tu tienda tiene unos pocos cientos de palabras que concentran la mayor parte del riesgo reputacional: pagar a un experto nativo por ella es barato en términos absolutos y obviamente merece la pena. Tus nueve mil cadenas de UI y de objetos en ocho idiomas representan casi todas las palabras pero ninguno de esos riesgos, y ningún presupuesto sobrevive a una tarifa por palabra en ellas.
Así que procesa el volumen aquí y luego elige tu propio límite. Algunos estudios integran el resultado directamente en la build. Otros añaden una revisión profesional en sus dos mercados más grandes, o solo en el texto de las misiones, y dejan el resto tal como llega. Ambas opciones son razonables, y ninguna consiste en reparar un primer borrador deficiente.
La automatización existe para que el tiempo del experto se dedique al lenguaje en lugar de a la gestión de archivos. Esa es la propuesta completa, y es honesta.
Empieza con el archivo que ya tienes
Exporta desde tu motor. Envía ese archivo. Lee el plan. No gastarás nada hasta que lo apruebes, por lo que el coste de saber si esto encaja con tu proyecto es una subida de archivo y dos minutos.
Si tienes una tabla de cadenas de Unity, una carpeta de archivos PO de Unreal o una hoja de cálculo con diálogos que lleva esperando desde tu último hito, ese es el material de entrada. Regístrate en AI Glot y traduce primero un archivo, y después asigna un agente al resto.