Locraft: Cuando Localizar 70 Idiomas Te Obliga a Crear Tu Propia Herramienta
Cómo el infierno de traducir LockLove a 70+ idiomas nos llevó a construir un pipeline de localización con IA que ahorra 42 horas por release. Y por qué lo hicimos público.
Randy Esperben
Crafter & CEO
420 Screenshots. 70 Idiomas. Cada Release.
Voy a hablar de un problema del que nadie habla en las charlas de desarrollo. Porque no es sexy. Porque no tiene un framework con logo bonito. Porque es la parte del proceso que todo el mundo asume que “ya se resolvió” y que en realidad sigue siendo un infierno manual disfrazado de herramientas a medio hacer.
Localización.
No traducción. Localización. Que son cosas muy distintas, aunque la mayoría de desarrolladores las usen como sinónimos.
Traducir es pasar “Send photo” a “Enviar foto.” Localizar es eso multiplicado por 70 idiomas, más los metadatos de la Play Store en cada uno de esos idiomas, más las 6 screenshots por idioma que Google te pide para cada listing, más los textos de Fastlane, más la web en varios idiomas, más el marketing, más los changelogs. Todo sincronizado. Todo consistente. Todo actualizado cada vez que cambias una sola cadena de texto en el idioma base.
420 screenshots por release. No es un número inventado. Son 6 screenshots por cada uno de los 70 idiomas. Y eso solo para la Play Store. Sin contar la web, los materiales de marketing, ni nada más.
Este problema nos explotó en la cara cuando LockLove, nuestra app de parejas, empezó a crecer internacionalmente. Y de ese dolor nació Locraft.
El Problema (Que Nadie Estaba Resolviendo Bien)
Cuando LockLove empezó a ganar tracción fuera de España, la internacionalización pasó de ser un “nice to have” a una necesidad urgente. Indonesia, Brasil, Turquía, Corea del Sur aparecían en nuestros datos de instalación. Parejas que querían usar la app pero que merecían una experiencia en su idioma, no una traducción automática a medio cocinar.
La decisión fue clara: si vamos a localizar, lo hacemos bien. 70+ idiomas. Todo.
Lo que no calculamos fue el coste real de esa decisión.
Traducir los strings de la app fue la parte fácil. Representaba quizá un 20% del trabajo total. El otro 80% era todo lo demás. Los títulos y descripciones de la Play Store en 70 idiomas, con sus restricciones de caracteres distintas. Las screenshots localizadas, porque una captura de pantalla con texto en inglés en el listing coreano es una señal clara de “esta app no se toma en serio tu idioma.” Los textos de Fastlane para automatizar los deploys. La web de LockLove con su copy adaptado. Los changelogs de cada versión. Y la parte más dolorosa de todas: mantener todo sincronizado.
Porque el problema no es localizar una vez. Es localizar continuamente. Cambias un string en español, y ese cambio tiene que propagarse a 70 idiomas. Añades una función nueva con 5 strings nuevas, y son 350 traducciones que necesitas. Corriges un typo en la descripción de la Play Store, y tienes que corregirlo en 70 listings.
Lo medimos. El proceso manual nos costaba 42 horas por ciclo de release. Eso es una semana laboral entera. Una semana que un desarrollador no está escribiendo código, no está mejorando la app, no está resolviendo bugs. Una semana entera dedicada a copiar y pegar traducciones, generar screenshots, y verificar que todo cuadre.
Busqué alternativas. Las había. Plataformas SaaS que cobraban por palabra traducida. A 70 idiomas y con la cantidad de texto que genera una app con su ecosistema completo, los presupuestos se disparaban rápidamente. Otras herramientas eran scripts básicos que solo manejaban archivos de strings, ignorando por completo los metadatos de las stores, las screenshots o la sincronización entre plataformas. Herramientas que resolvían el 20% fácil y te dejaban solo con el 80% difícil.
Ninguna resolvía el pipeline completo. Ninguna.
La Idea: Locraft
La primera versión de Locraft fue un script de Python bastante feo. Sin nombre, sin estructura, sin pretensiones. Solo un script que hacía llamadas a la API de Anthropic para traducir nuestros archivos de strings de LockLove y que guardaba checksums MD5 para saber qué había cambiado desde la última ejecución.
Lo escribí un viernes por la tarde, frustrado después de pasar dos días traduciendo manualmente metadatos de la Play Store. Funcionaba. Mal, pero funcionaba. Ese fin de semana lo mejoré. El lunes siguiente ya tenía algo que parecía una herramienta.
El momento “aha” fue cuando entendí que la IA podía hacer el trabajo pesado, pero que necesitaba un sistema inteligente alrededor. No basta con lanzar strings a un modelo de lenguaje y esperar lo mejor. Necesitas detección de cambios para no retraducir todo cada vez. Necesitas validación automática para que un placeholder como {name} no se traduzca como {nombre}. Necesitas control de longitud porque lo que en inglés ocupa 20 caracteres en alemán puede ocupar 45, y tu botón no tiene espacio para 45 caracteres. Necesitas soporte para múltiples plataformas porque los archivos de strings de Flutter no tienen nada que ver con los de Fastlane ni con los JSON de una web.
La IA era el motor. Pero el pipeline alrededor era lo que lo convertía en algo usable en producción.
Cuando usamos Locraft por primera vez en un release real de LockLove, las 42 horas se convirtieron en menos de 3. Eso no es un eslogan de marketing. Es lo que medimos. Y fue en ese momento cuando pensé: cualquier desarrollador que esté publicando una app global necesita esto. No solo nosotros. Cualquiera.
Así que lo empaquetamos, le pusimos nombre, lo publicamos en PyPI, y lo hicimos público. Locraft: localización artesanal con IA.
Cómo Funciona (Sin Aburrirte)
Voy a describir lo que hace Locraft desde la perspectiva de un desarrollador que tiene una app en producción y necesita localizarla. Sin diagramas de flujo. Sin buzzwords.
Pipeline de traducción con IA que entiende contexto
Locraft usa las APIs de Anthropic y OpenAI, pero no de la forma obvia. No es “manda el string, recibe la traducción.” El sistema envía contexto: qué tipo de app es, dónde aparece el texto (botón, título, descripción, metadata), cuáles son las restricciones de longitud, y cuál es el tono de la app. La diferencia entre una traducción genérica y una localización contextual es enorme. “Lock” puede ser “bloqueo”, “cerradura” o “candado” dependiendo del contexto. Locraft lo sabe.
Detección de cambios con MD5
Esta es probablemente la función que más dinero ahorra. Cada string que Locraft traduce se almacena con un hash MD5 de su contenido original. En el siguiente release, Locraft compara los hashes. Si un string no ha cambiado, no se retraduce. Si de 200 strings solo has modificado 3, Locraft traduce 3 strings a 70 idiomas, no 200.
Esto tiene implicaciones directas en coste y tiempo. Tanto las APIs de IA como el proceso de validación solo se ejecutan sobre lo que realmente ha cambiado. Un release con cambios menores, que es la mayoría de releases, pasa por el pipeline en minutos.
Batch API al 50% de descuento
Cuando tienes que traducir a 70 idiomas, el coste de las APIs de IA se multiplica rápido. Locraft usa la OpenAI Batch API, que cuesta la mitad que la API estándar. El sistema agrupa las peticiones de traducción en lotes eficientes, las envía como un batch, y procesa las respuestas cuando están listas. No es tiempo real, pero para un proceso de localización que se ejecuta durante un release, no necesitas tiempo real. Necesitas eficiencia y ahorro.
Plugins por plataforma
Flutter, Web/Astro, Fastlane, Android nativo. Cada plataforma tiene su propio formato de archivos de localización, sus propias convenciones, sus propias particularidades. Locraft maneja esto con un sistema de plugins. Cada plugin sabe leer y escribir el formato de su plataforma. Tu stack, tu elección. Instala los plugins que necesites, ignora los que no.
Esto significa que puedes usar Locraft solo para los strings de tu app Flutter, o puedes usarlo para todo el ecosistema: strings de la app, metadatos de Fastlane, copy de la web, descripciones de la Play Store. Todo desde el mismo pipeline, con la misma detección de cambios y la misma validación.
Validación automática que atrapa errores antes de producción
La traducción con IA es buena, pero no es infalible. Un modelo puede traducir {name} como {nombre}. Puede generar un texto de 80 caracteres donde el límite es 50. Puede olvidarse de un placeholder o cambiar la estructura de un JSON.
Locraft valida cada traducción automáticamente. Verifica que los placeholders del texto original existen en la traducción. Comprueba que la longitud no excede los límites definidos. Valida la estructura de archivos JSON y XML. Detecta claves que faltan comparando el idioma base con cada idioma de destino. Los errores se atrapan antes de que lleguen a producción, no después de que un usuario en Turquía te deje una review de una estrella porque un botón muestra texto cortado.
Generación de screenshots
420 screenshots localizadas en un click. Esta es la función Pro que justifica el precio por sí sola. Locraft toma tus screenshots base, detecta el texto que contienen, lo localiza, y genera las 420+ imágenes que necesitas para los listings de la Play Store. Lo que antes era un proceso manual de días se convierte en una ejecución de minutos.
Dashboard interactivo
Un dashboard construido con Streamlit donde puedes monitorizar el progreso de la localización, revisar traducciones, detectar problemas, comparar idiomas. Orientado a desarrolladores, no a traductores. Métricas que importan: porcentaje de completitud por idioma, strings sin traducir, validaciones fallidas, coste estimado de la próxima ejecución.
Pipelines resumibles
Si el proceso se interrumpe a mitad de ejecución, por un corte de red, por un timeout de la API, por lo que sea, Locraft retoma exactamente donde se quedó. Sin repetir llamadas a la API que ya se hicieron. Sin perder trabajo. Sin malgastar dinero. En un pipeline que procesa 70 idiomas, esto no es un lujo. Es una necesidad.
CLI primero
pip install locraft y listo. Funciona en tu terminal, funciona en tu CI/CD, funciona en GitHub Actions. Sin interfaces web que configurar, sin cuentas que crear antes de poder usarlo. Instala, configura tu API key, ejecuta. Filosofía Unix: haz una cosa y hazla bien.
La Cocina: Tecnologia y Decisiones
Aquí entramos en territorio que espero que disfrutes si eres de los que lee los changelogs de las herramientas que usa.
Por qué Python
La pregunta obvia para un CLI de desarrollo es: por qué no Go, por qué no Rust. La respuesta es pragmática. Locraft depende fuertemente del ecosistema de IA, y las mejores librerías para interactuar con las APIs de Anthropic y OpenAI están en Python. La librería oficial de Anthropic, la de OpenAI, las utilidades de procesamiento de texto, el ecosistema de validación. Todo está en Python y todo está mantenido activamente.
Además, Python es el lenguaje que más desarrolladores saben usar. Un CLI en Go puede ser más rápido, pero si el desarrollador que lo necesita no puede leer el código fuente cuando algo falla, esa velocidad extra no vale nada. Python es legible, es accesible, y tiene un ecosistema de packaging maduro con PyPI.
La estrategia de hashing MD5
Cada string se identifica por la combinación de su clave y su contenido en el idioma base. Al ejecutar Locraft, se genera un hash MD5 de cada string. Estos hashes se almacenan en un archivo de estado local. En la siguiente ejecución, Locraft compara los hashes actuales con los almacenados. Si coinciden, ese string no ha cambiado y no necesita retraducción. Si difieren, se marca para retraducción.
La elegancia está en la simplicidad. No hay base de datos, no hay servidor de estado, no hay dependencias externas. Un archivo JSON con hashes. Es rápido de calcular, fácil de versionar con git, y fiable. MD5 no es criptográficamente seguro, pero para detección de cambios en strings de texto es más que suficiente.
Integración con Batch API
Traducir un string a un idioma es una llamada a la API. Traducir 50 strings a 70 idiomas son 3.500 llamadas. La Batch API de OpenAI permite agrupar esas llamadas en un solo envío que se procesa de forma asíncrona a la mitad de precio.
Locraft agrupa las peticiones de forma inteligente. No envía un batch de 3.500 peticiones de golpe. Las organiza por idioma, por prioridad, por tamaño. Gestiona los límites de rate de la API. Y cuando las respuestas llegan, las mapea de vuelta a sus strings originales y ejecuta la validación sobre cada una.
El resultado es un coste por release que se reduce drásticamente comparado con usar la API estándar. Para una app con 70 idiomas, la diferencia entre API estándar y Batch API puede ser de cientos de euros por release.
Arquitectura de plugins
Cada plataforma en Locraft es un plugin independiente. El plugin de Flutter sabe leer archivos ARB y escribir archivos ARB. El de Fastlane sabe interpretar la estructura de carpetas de metadatos por idioma. El de Web/Astro maneja archivos JSON de i18n. El de Android nativo trabaja con strings.xml.
El pipeline central no sabe nada de formatos. Solo trabaja con un formato interno normalizado. Los plugins son los que traducen entre el formato específico de la plataforma y el formato interno. Esto hace que añadir soporte para una nueva plataforma sea escribir un plugin, no modificar el core.
El motor de validación
Validar traducciones automáticamente es más difícil de lo que parece. Los placeholders son el caso más obvio: {name} debe aparecer exactamente como {name} en cada traducción. Pero hay más. Las comillas tipográficas cambian entre idiomas. Los formatos de fecha y hora varían. Algunos idiomas no usan espacios antes de los signos de puntuación y otros sí. El japonés no usa espacios entre palabras.
El motor de validación de Locraft ejecuta una batería de comprobaciones sobre cada traducción: presencia de placeholders, longitud máxima y mínima, estructura de archivos, caracteres no permitidos, y consistencia de formato. Las validaciones se pueden configurar por idioma, porque lo que es un error en español puede ser correcto en francés.
Generación de screenshots
Este fue probablemente el componente más complejo de construir. Locraft toma las screenshots base del idioma por defecto, identifica las regiones de texto mediante coordenadas configurables, genera el texto localizado para cada idioma respetando los estilos tipográficos originales, y renderiza las 420+ imágenes resultantes.
El proceso tiene que manejar fuentes distintas por idioma, ya que los caracteres CJK, el árabe, el hindi, y otros scripts necesitan fuentes específicas. También ajusta tamaños de texto dinámicamente cuando la traducción es más larga que el original, lo cual sucede constantemente con idiomas como el alemán o el finlandés.
Streamlit como dashboard
La decisión de usar Streamlit fue natural. Es Python, que ya es el lenguaje base de Locraft. Está orientado a desarrolladores, no a diseñadores. Se despliega con un comando. Y permite crear dashboards interactivos con muy poco código que hacen exactamente lo que necesitas: mostrar datos, filtrar, y actuar.
El dashboard de Locraft muestra el estado de la localización en tiempo real. Porcentaje de completitud por idioma, strings pendientes de validación, historial de cambios, coste acumulado de API. Todo lo que un desarrollador necesita para gestionar la localización de su app sin salir de su workflow.
El Negocio detras de la Herramienta
Locraft tiene dos niveles, y la división entre ellos es deliberada.
Community es gratuito para siempre. El pipeline de traducción completo, la detección de cambios con MD5, la validación básica, acceso al CLI, soporte para todos los plugins de plataforma. Es open source en GitHub y siempre lo será. Un desarrollador que quiera localizar su app a 70 idiomas puede hacerlo sin pagar un euro. Sin límites artificiales, sin funciones recortadas, sin “prueba gratis durante 14 días.”
Pro cuesta 99 euros al ano. Generación automática de screenshots, validación avanzada con reglas personalizadas, dashboard interactivo, soporte prioritario, y acceso anticipado a nuevas funciones.
Por qué 99 euros al ano. Porque es menos de lo que cuesta una hora de trabajo de un desarrollador senior en Europa. Y Locraft ahorra 42 horas por release. El ROI es de las cosas que no necesitas una hoja de cálculo para justificar. Es absurdamente evidente.
La filosofía es simple: el core es libre. Las funciones que ahorran tiempo serio a equipos que publican con frecuencia tienen un precio justo. Es un modelo que respeta a la comunidad y que sostiene el desarrollo del proyecto.
GitHub: github.com/Fabrica-Studio/locraft
Web: locraft.dev
PyPI: pip install locraft
Resultados: Los Numeros que Importan
Los números sin contexto no dicen nada. Así que voy a contextualizar.
70+ idiomas soportados. Eso no es una lista de flags en una landing page. Eso son 70 conjuntos de strings validados, 70 metadatas de Play Store con sus restricciones de caracteres, 70 conjuntos de screenshots generadas y verificadas. Cada idioma es un universo con sus reglas tipográficas, sus convenciones culturales y sus particularidades técnicas.
50% de ahorro con Batch API frente a la API estándar. En una ejecución que traduce 200 strings a 70 idiomas, eso son 14.000 traducciones. La diferencia entre pagar el precio estándar y el precio batch no es un redondeo. Es la diferencia entre un coste asumible y uno que te hace reconsiderar la localización.
42 horas ahorradas por ciclo de release. Eso es una semana laboral entera. Cinco días de ocho horas. Un desarrollador que no está escribiendo features, no está corrigiendo bugs, no está en code reviews. Una semana entera que antes se iba en copiar, pegar, verificar, generar screenshots, subir metadatos y rezar para que no te hayas dejado un placeholder roto en turco.
420+ screenshots generadas automáticamente por release. Antes, cada screenshot era manual. Abrir la app en el idioma correcto, navegar a la pantalla correcta, hacer la captura, recortarla, anotarla, subirla. Multiplicado por 6 screenshots por idioma, multiplicado por 70 idiomas. Ahora es un comando.
Todo empezó con LockLove, nuestra app de parejas. La necesidad de localizarla a 70+ idiomas fue lo que nos empujó a construir Locraft.
Lo que Aprendimos
Tres lecciones honestas de construir Locraft.
La primera: las mejores herramientas de desarrollo nacen de tus propios problemas. Cuando construyes algo para resolver tu propio dolor, conoces el problema de una forma que ningún estudio de mercado te va a dar. Sabes exactamente dónde duele, cuánto duele, y qué soluciones ya probaste y fallaron. Locraft no nació de un brainstorm en una pizarra. Nació de dos días perdidos traduciendo metadatos de la Play Store manualmente. Ese nivel de frustración produce herramientas que realmente funcionan.
La segunda: la traducción con IA es buena, pero no es magia. Sin la capa de validación, una traducción con IA es una apuesta. Puede ser perfecta o puede tener un placeholder roto que crashea tu app en producción. Lo que hace que la traducción con IA sea production-ready no es el modelo de lenguaje. Es todo lo que pones alrededor: validación de placeholders, control de longitud, verificación de estructura, detección de anomalías. El modelo es el 50% del trabajo. La ingeniería alrededor es el otro 50%.
La tercera: open source con un tier de pago es un modelo saludable para herramientas de desarrollo. Dar valor gratis construye comunidad y confianza. Cobrar por las funciones que ahorran tiempo serio a equipos profesionales sostiene el desarrollo. No tienes que elegir entre ser generoso y ser sostenible. Puedes ser las dos cosas si dibujas la línea en el sitio correcto.
Tienes un Proyecto Global? Hablemos
Si estás construyendo una app que necesita funcionar en más de un idioma, sabes de qué estoy hablando. Sabes lo que es abrir una hoja de cálculo con traducciones y sentir que tu alma se escapa del cuerpo. Sabes lo que es encontrar un placeholder roto en producción porque nadie revisó la traducción al indonesio. Sabes lo que es perder días enteros en un proceso que debería estar automatizado.
Locraft existe porque pasamos por todo eso con LockLove y decidimos que no íbamos a pasar por eso dos veces.
Prueba Locraft gratis en locraft.dev o instálalo directamente con pip install locraft. Y si necesitas ayuda construyendo la app que vas a localizar, escríbenos en nuestro formulario de contacto.
Porque en fabrica no solo construimos apps. También construimos las herramientas que hacen falta para construirlas bien.