---
title: Traducir un sitio en Next.js con Gemini sin romper la producción
description: >-
  Cómo traducir contenido MDX automáticamente con la API Batch de Gemini a mitad
  de precio, validar cada respuesta antes de guardarla y pagar solo por lo que
  realmente ha cambiado.
publishedAt: '2026-07-08'
updatedAt: '2026-07-08'
noindex: false
canonicalPath: /es/blog/translate-nextjs-site-gemini-batch-api
---
La traducción automática es lo bastante barata como para traducir todo un sitio a diez idiomas por menos de lo que cuesta un café. El problema nunca fue el modelo. Es todo lo que lo rodea: saber qué hay que traducir, detectar los errores del modelo antes de que lleguen a producción y no pagar por volver a traducir 500 páginas solo por corregir un error tipográfico en una.

Este artículo detalla cómo Scribe gestiona cada uno de estos aspectos utilizando este mismo sitio (diez idiomas, todas las páginas traducidas) como ejemplo práctico.

## Traducir solo lo que ha cambiado

Cada documento traducible obtiene un hash de su contenido: los campos marcados del frontmatter y el cuerpo en MDX. Cada traducción guardada recuerda el hash a partir del cual se generó. La lista de tareas para una ejecución de traducción es simplemente cada par de (documento, idioma) donde los hashes no coinciden o no existe una traducción.

Esto ofrece dos ventajas muy útiles:

- Corregir un error en un archivo desactualiza exactamente un documento en cada idioma.
- Ejecutar `scribe translate` dos veces seguidas no hace nada la segunda vez.

Antes de gastar dinero, `scribe translate --dry-run` imprime la lista de tareas con los tokens estimados y el coste por elemento. Agrupar los lanzamientos del mismo día en nuestro registro de cambios, por ejemplo, mostró 18 elementos pendientes con un coste estimado de 0,07 dólares antes de confirmarlo.

## A mitad de precio con la API Batch

Por defecto, la traducción se ejecuta a través de la API Batch de Gemini, que factura los tokens de entrada y salida al 50 % de la tarifa interactiva. Todas las solicitudes se planifican y envían por adelantado y luego se consultan juntas. Los trabajos se guardan en la base de datos SQLite en el momento en que se envían. De este modo, puedes salir durante el proceso de consulta y volver a ejecutar `scribe translate` más tarde para retomarlo donde lo dejaste.

Los prompts también están estructurados para que el contenido en inglés forme un prefijo idéntico en todos los idiomas de destino. Cuando una página se traduce a nueve idiomas, el almacenamiento en caché del contexto implícito de Gemini descuenta los tokens de entrada repetidos. Las instrucciones específicas para cada idioma se sitúan al final del prompt, donde no rompen el prefijo compartido.

## Validar antes de guardar, no después de publicar

El modelo devolverá de vez en cuando algo roto: un MDX no válido, un campo inventado o una cadena truncada. La regla que permite sobrevivir a esto es simple: nada entra en la base de datos sin ser validado.

Cada respuesta se analiza como MDX y se vuelve a comprobar con el esquema Zod del documento. Si una respuesta falla, falla ese elemento y no tu sitio. Al final de la ejecución, los elementos fallidos se reintentan una vez devolviendo los errores de validación al modelo, que suele corregir la mayoría de ellos. Todo lo que falla dos veces se notifica y se deja sin traducir. Mientras tanto, tu compilación sigue sirviendo la versión en inglés para ese idioma.

## Traducción frente a transcreación

Una traducción literal se lee como un manual. El prompt integrado en Scribe plantea la tarea como una transcreación: el modelo escribe como un redactor publicitario nativo que produce la edición localizada del texto. Transmite la intención de cada frase en lugar de reflejar la sintaxis de origen, recrea los juegos de palabras y las frases hechas en lugar de traducirlos literalmente y aplica las convenciones tipográficas nativas.

Puedes ajustarlo aún más con `translate.context` (de qué trata el sitio, los términos de la marca que deben mantenerse en inglés) y `translate.rules` (las restricciones de estilo propias) en tu configuración. Consulta la [guía de traducción](/docs/translation) para ver todas las opciones.

## Cuánto cuesta esto en la práctica

Este sitio tiene una página de inicio, una sección de documentación, un registro de cambios y ahora un blog traducidos a nueve idiomas aparte del inglés. Una traducción completa desde cero cuesta unos pocos dólares. Las ejecuciones incrementales tras la edición normal cuestan céntimos. La parte cara de los sitios multilingües nunca fueron los tokens: fue la coordinación. La caducidad basada en hashes elimina esa coordinación.

Empieza con la [guía de inicio](/docs/getting-started) y luego ejecuta tu primera traducción con la [referencia de la CLI](/docs/cli) abierta.
