Cómo nuestro juego aprendió catorce idiomas en una semana 🌍
10 de agosto de 2026
Cuando empezamos, Blocks Beyond the Stars hablaba exactamente dos idiomas: alemán, porque es donde vivimos, e inglés, porque internet habla inglés. Hoy habla catorce. Te contamos cómo pasó, y todo lo que se rompió por el camino. 🌍
Todo empezó con Francesco. Hace unas semanas llegó una pull request desde Italia: Francesco Quirino había empezado a traducir el juego al italiano. A mano. Grupo por grupo, empezando por los 290 nombres de bloques y sus descripciones. Ese fue el momento en que nos dimos cuenta de que teníamos que tomarnos los idiomas en serio, porque hasta entonces la mitad del texto del juego ni siquiera se podía traducir. Más de 300 mensajes del servidor estaban fijados en inglés. Así que primero ordenamos la casa, solo para que el trabajo de Francesco tuviera dónde aterrizar.
Luego llegó la pregunta incómoda. Traducir un idioma a mano lleva semanas, y nosotros somos una familia, no un estudio de localización. Así que: máquina, pero bien hecha. Construimos una pequeña herramienta que parte el archivo de idioma en trozos, hace que un modelo de lenguaje los traduzca y después comprueba: ¿falta alguna cadena? ¿Desapareció un marcador como {0}? ¿Se inventó una clave que no existe? Si es así, se descarta. Solo cuando la herramienta funcionó de forma fiable empezamos a añadir idiomas: neerlandés, portugués de Brasil, polaco, turco, y después ruso, ucraniano, chino, japonés y coreano.
El tono fue más difícil que las palabras. Un modelo de lenguaje traduce de forma educada y formal por defecto. Pero un juego para niños que te habla como una carta del banco da un poco de grima. Así que cada idioma recibió su propia regla: «je/jij» en neerlandés, «ty» en polaco, «sen» en turco, «você» en portugués de Brasil, «ты» en ruso, です/ます en japonés, 해요체 en coreano. El neerlandés nos costó una pasada extra, porque una IJ al principio de palabra se escribe con las dos letras en mayúscula: «IJzererts», no «Ijzererts». Ninguna máquina lo descubre sola; se descubre leyendo el resultado.
Y luego estaban los cuadraditos vacíos. Teníamos el ruso totalmente traducido, abrimos el juego y el menú solo mostraba rectángulos. Nuestra letra de la casa, Rajdhani, simplemente no tiene cirílico. Con el chino, el japonés y el coreano la cosa se puso de verdad complicada: una fuente CJK completa pesa unos 16 megabytes. Multiplicado por tres, son casi 50 MB, impensable para un juego que también debe funcionar en un navegador. La solución: crear una fuente de subconjunto a medida para cada idioma, con exactamente los caracteres que aparecen en nuestros textos. 16 MB se convierten en 800 KB. En vez de 50 MB, el juego crece dos. 🔤
Lo que aprendimos. Traducir es un 20 % traducción y un 80 % todo lo demás: sacar los textos del código para empezar, encontrar fuentes, comprobar que las frases siguen cabiendo en los botones (el alemán es largo, pero el ruso lo es más) y asegurarse de que hasta el cuadro de error esté traducido, el que aparece antes de que se carguen los archivos de idioma. Tuvimos que escribir ese último mensaje a mano catorce veces. Se siente raro, pero es el único mensaje que tienes que poder leer sí o sí.
Para ser sinceros: la primera pasada es una traducción automática. Es buena, está completa, está validada, pero no la ha leído nadie que hable el idioma de nacimiento. Lo decimos a propósito, en vez de aparentar que tenemos catorce traductores. Por eso mismo el trabajo italiano de Francesco se conserva carácter por carácter: nuestra herramienta solo rellena huecos y nunca sobrescribe una traducción humana. Donde ha estado una persona, gana la persona.
Si hablas alguno de estos idiomas: nos encantaría recibir tus correcciones, aunque sea una sola. El repositorio tiene una guía de traducción que te explica paso a paso cómo contribuir, y si GitHub no es lo tuyo, simplemente dinos qué frase suena rara. Alguien que lo hable de nacimiento detecta en cinco minutos más de lo que nosotros en cinco horas. 🌍✨
Comentarios