Deja de externalizar el lenguaje de tu producto

7 min de lectura

La traducción es trabajo de producto

01.09.2026, Por Stephan Schwab

La traducción de software suele tratarse como una tarea administrativa: exportar cadenas, mandarlas fuera e importar el resultado. Funciona hasta que un verbo aparentemente inocente aprueba una factura, cambia el estado de un contrato o le dice al cliente que algo ya es definitivo. La IA abarata el primer borrador, no las consecuencias. El lenguaje de producto necesita el mismo contexto, revisión y responsabilidad que el código. La pregunta no es quién puede traducir un archivo, sino quién puede juzgar las palabras dentro del producto en funcionamiento.

Una mano integra una pieza de lenguaje en un flujo de software modular mientras los documentos quedan apartados

El flujo de traducción tradicional se creó para folletos, manuales y documentos jurídicos. Allí funciona razonablemente bien porque el documento es lo que importa.

El software empresarial es distinto. Sus textos forman parte de permisos, aprobaciones, facturas, errores de validación y botones que la gente pulsa cuando hay dinero o datos de clientes en juego. Una frase forma parte de una acción.

Pero el viejo patrón sobrevive:

  • los desarrolladores exportan archivos de cadenas
  • un proveedor los traduce sin contexto
  • alguien los importa después
  • el equipo de producto descubre que las palabras no encajan ni en la pantalla ni en el mercado
  • nadie sabe qué cambio introdujo la confusión

No es un fracaso de la traducción como profesión. Es una falta de responsabilidad sobre el producto.

El software empresarial multilingüe se complica cuando el idioma se convierte en arquitectura frontend. El modelo más tranquilo mantiene el lenguaje donde ya existe responsabilidad sobre el producto: en el repositorio, en la revisión, en las pruebas y en el flujo de entrega.

Quien traduce debe ver el producto

Si quien traduce no puede ver el flujo, está adivinando. Con educación, a gran precio y, a menudo, mal.

El equipo de desarrollo es responsable del producto. El traductor, de un archivo. La empresa carga con las consecuencias.

Un reparto maravilloso. Cada cual recibe una responsabilidad separada y nadie responde por la frase que el usuario realmente lee.

El problema no es que los traductores trabajen fuera de la empresa. El proceso los aparta del contexto donde vive el significado. Submit puede ser inofensivo en una pantalla e incorrecto en otra. Approve, accept, confirm, release y send parecen intercambiables hasta que uno libera una factura, cambia el estado de un contrato o hace creer a un cliente que algo es jurídicamente definitivo.

Ese contexto rara vez sobrevive a una exportación. Sobrevive mucho mejor en un pull request.

Quien revisa con conocimiento del idioma puede ver las claves modificadas, las plantillas que las rodean, la discusión de producto y una captura o vista previa de la pantalla en funcionamiento. La IA puede preparar la primera pasada. La revisión humana protege el significado del producto.

El trabajo deja de ser «traduce estos archivos» y pasa a ser «decide si este cambio de producto habla como debe en este mercado». Es un trabajo mucho mejor.

La ejecución debe ser aburrida

La mejor arquitectura de i18n suele ser la que entrega al usuario el documento correcto en el idioma correcto.

El enfoque centrado en el backend con componentes web mantiene el modelo de traducción deliberadamente poco emocionante. El servidor resuelve el idioma desde Accept-Language o una preferencia guardada y renderiza la página en ese idioma.

Los componentes web aportan comportamiento reutilizable donde resulta útil, pero no se convierten en un segundo entorno de ejecución para las traducciones salvo que el producto lo necesite de verdad. Un componente puede recibir etiquetas traducidas como atributos, slots o contenido hijo ya renderizado. No necesita conocer las reglas del plural alemán para mostrar un panel de estado.

Backend:

  • resolver el idioma desde las cabeceras de la petición o la preferencia del usuario
  • cargar los mensajes
  • renderizar las plantillas
  • dar formato coherente a fechas, números y dinero

Componente web:

  • mejorar un selector de fecha, una tabla, un diálogo o un control de estado con comportamiento del navegador
  • emitir eventos
  • preservar la accesibilidad
  • usar las etiquetas ya renderizadas que recibe

El resultado no es primitivo. Está controlado.

Un patrón para cualquier backend

Mantén los catálogos de mensajes junto al producto y pasa el texto traducido al HTML. El framework es secundario.

Una ruta al estilo Flask puede negociar el idioma, cargar los mensajes y renderizar HTML sin meter el idioma en la URL del recurso:

SUPPORTED_LOCALES = ["en", "de", "es"]

def resolve_locale():
    return request.accept_languages.best_match(SUPPORTED_LOCALES) or "en"

@app.get("/invoices/<invoice_id>")
def invoice_detail(invoice_id):
    locale = resolve_locale()
    messages = load_messages(locale)
    invoice = invoice_service.get(invoice_id)

    return render_template(
        "invoice_detail.html",
        t=messages,
        invoice=invoice,
        locale=locale,
    )

La plantilla pasa las etiquetas traducidas al componente:

<invoice-actions
  approve-label=""
  send-label=""
  status="">
</invoice-actions>

Los catálogos siguen siendo aburridos:

{
  "invoice.approve": "Approve invoice",
  "invoice.send": "Send invoice",
  "invoice.paid": "Paid"
}

Las variantes alemana y española están junto al archivo de origen. El equipo puede comparar los cambios, la IA puede redactar traducciones para las claves que faltan y una persona multilingüe puede corregir la frase junto a la plantilla que la utiliza.

Spring Boot sigue el mismo modelo con paquetes de mensajes:

messages.properties
messages_de.properties
messages_es.properties

Thymeleaf pasa los mensajes localizados al componente:

<h1 th:text="#{invoice.title}">Invoice</h1>

<invoice-actions
  th:attr="approve-label=#{invoice.approve},
           send-label=#{invoice.send},
           status=${invoice.status}">
</invoice-actions>

Python, Java o cualquier otra cosa: el modelo de responsabilidad no cambia. El servidor renderiza la página en el idioma elegido, el componente recibe texto específico para ese idioma y los archivos de mensajes viven en Git. Nadie manda una hoja de cálculo por correo al vacío.

La IA redacta; las personas deciden

La IA sirve para primeros borradores y comprobaciones de coherencia. No es la autoridad final sobre el lenguaje de un mercado.

La IA abarata la revisión de traducciones. No vuelve opcional el criterio. Entregar el resultado de una máquina porque sonaba fluido en la demostración es la receta para obtener disparates corteses con una puntuación impecable.

Usa la IA para aquello que hace bien:

  • redactar traducciones que faltan a partir de las cadenas originales
  • mantener la terminología coherente entre archivos
  • identificar claves que faltan en un idioma
  • proponer alternativas más cortas cuando las etiquetas no caben
  • comparar la redacción con el contexto cercano del producto
  • preparar un diff que las personas puedan revisar

Después, deja el juicio en manos de personas multilingües:

  • ¿Suena natural?
  • ¿Coincide con el tono del producto?
  • ¿La palabra implica una acción jurídica o comercial equivocada?
  • ¿La forma es demasiado formal, demasiado informal, demasiado inglesa o demasiado literal?
  • ¿Un cliente de este mercado confiaría en esta redacción?

La IA redacta.

Las personas deciden.

El repositorio recuerda.

El pull request es la herramienta de traducción

La mayoría de las empresas ya tienen el sistema de colaboración que necesitan. Simplemente se empeñan en usarlo exclusivamente para el código.

Un pull request de traducción puede mostrar las claves nuevas, los borradores generados por IA, las plantillas donde aparecen las cadenas, capturas o enlaces de vista previa, comentarios de personas multilingües y resultados de pruebas que demuestren que ningún idioma carece de claves obligatorias.

Eso está mucho más cerca de la realidad del producto que enviar archivos extraídos a un proveedor que nunca ve el recorrido del usuario. También ofrece al CTO algo que el proceso antiguo rara vez proporciona: trazabilidad.

¿Quién cambió esta etiqueta? ¿Por qué elegimos esta redacción? ¿La revisó alguien que habla el idioma? ¿Podemos revertirla limpiamente?

El trabajo de traducción en el repositorio responde esas preguntas. Con entregas de archivos, un jefe de proyecto acaba buscando en el correo.

El flujo es sencillo

El flujo práctico es lo bastante pequeño como para empezar sin comprar otra plataforma:

  1. Los desarrolladores añaden o cambian claves de mensajes como parte del cambio de producto.
  2. Codex redacta las traducciones que faltan en la misma rama.
  3. Las comprobaciones automáticas fallan si a un idioma le falta una clave obligatoria.
  4. Una persona multilingüe revisa la redacción en el pull request.
  5. El equipo revisa la pantalla, no solo el archivo.
  6. El producto sale con el lenguaje revisado como parte del cambio.

Esto no va contra los traductores. Va contra el aislamiento.

Los traductores externos pueden seguir participando, pero dentro del flujo del producto en lugar de al final de una entrega de archivos. Los compañeros multilingües pueden ayudar donde importan los matices del dominio. Quienes trabajan de cara al cliente pueden señalar frases que generarán consultas de soporte innecesarias. El CTO puede ver que la traducción ya no es un misterio de última hora.

Deja de encerrar el lenguaje en otra sala

El producto cambia en una sala. El lenguaje, en otra. El cliente vive ambos como una sola cosa.

Ese desfase es todo el problema.

Renderiza páginas específicas para cada idioma en el servidor. Mantén los componentes reutilizables sin hacerlos responsables del estado de traducción. Deja que la IA prepare los primeros borradores. Deja que las personas multilingües revisen las palabras allí donde el producto ya está cambiando.

No es un programa de transformación. Es un hábito de trabajo mejor. Para un CTO, eso importa más que otra plataforma de localización con un panel que nadie vuelve a abrir después del lanzamiento.

Hablemos de la situación

Cuénteme qué está pasando. Yo escucho, hago algunas preguntas prácticas y le devuelvo lo que veo: dónde puede estar el riesgo, qué puede estar bloqueando la entrega y qué parece valer la pena revisar después. Sin discurso comercial, sin compromiso. Confidencial y directo.

Iniciar una conversación

Newsletter: Sin teatro metodológico. Sin relleno.
Ideas reales sobre entrega de software y liderazgo.

×