Traducir HTML
Traducir una página web casi siempre significa que alguien copia el texto fuera de las etiquetas, lo traduce y lo vuelve a pegar, cruzando los dedos para no romper un atributo en el camino. Este endpoint lee el DOM, traduce solo lo que un visitante realmente ve, y devuelve el mismo marcado con la misma estructura intacta.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
El problema de romper etiquetas
Las herramientas de traducción automática pensadas para prosa simple se atascan con HTML porque no distinguen una oración de una etiqueta de script. Si pasa una página cruda por un traductor genérico, es común recibir atributos rotos, nombres de clase traducidos por error o valores de href alterados en silencio, el tipo de falla que no se nota hasta que un enlace deja de funcionar en producción. translate.html primero analiza el documento, así que la traducción solo toca los nodos de texto y el puñado de atributos pensados para llevar idioma, como alt y title.
Qué se traduce realmente
El texto visible, los atributos alt de las imágenes, los tooltips de title y el contenido de la meta descripción pasan al idioma de destino. Los nombres de etiqueta, los atributos class e id, los estilos en línea, el contenido de los bloques script y style, y el árbol general del documento se mantienen exactamente igual. El anidamiento, los comentarios y el formato sensible a espacios dentro de bloques pre o code quedan intactos, porque el código de ejemplo en una página de tutorial no debería traducirse a otro idioma por accidente.
La solicitud en sí
Envíe el fragmento de HTML o el documento completo por POST a /translate/html junto con el idioma de destino, y la tarea corre de forma asíncrona. Recibe un task_id de inmediato, y el HTML traducido llega después mediante una llamada de webhook firmada o un enlace firmado válido por 24 horas, según cómo su canal de despliegue ya verifica trabajos terminados.
Por qué importa una traducción consciente del marcado en automatización
Un flujo de localización que trata el HTML como HTML, no como un bloque de texto, es uno que puede correr sin supervisión. Las páginas de marketing, las descripciones de producto, los artículos de centro de ayuda y las plantillas de correo casi siempre se escriben en HTML, y un script que envía cada página de un sitemap durante la noche, etiqueta por etiqueta, con la estructura preservada, elimina la revisión manual que antes atrapaba una etiqueta de cierre extraviada por un traductor. Como el precio es una cuota fija pequeña más una tarifa por palabra, traducir mil páginas cortas cuesta proporcionalmente lo mismo que traducir una sola: no hay tamaño mínimo de lote ni escalón de descuento que negociar, solo un renglón de gasto predecible que su equipo puede presupuestar.
Qué puede hacer con ella
Localización de páginas de marketing
Una tienda en línea envía sus páginas de producto en HTML y recibe de vuelta el mismo diseño en portugués, listo para publicar sin que un desarrollador rearme la plantilla.
Traducción de centro de ayuda
Un equipo de soporte de una plataforma SaaS traduce cientos de artículos escritos en HTML conservando capturas de pantalla incrustadas, enlaces internos y el formato paso a paso.
Plantillas de correo transaccional
Un sistema de facturación traduce sus plantillas de correo en HTML al idioma de cada cliente sin mover las etiquetas de combinación ni el estilo de los botones.
Flujo de contenido de un CMS
Un CMS headless llama al endpoint al publicar, traduciendo automáticamente el cuerpo HTML de cada entrada nueva del blog a los demás idiomas del sitio.
Preguntas frecuentes
¿Cómo traduzco HTML con la API?
Envíe el contenido HTML y el idioma de destino por POST a /translate/html, guarde el task_id devuelto y obtenga el marcado traducido por webhook o mediante un enlace firmado válido por 24 horas.
¿Es gratis la API para traducir HTML?
No, no hay plan gratuito ni prueba; cuesta $0.003 por solicitud más $0.0135 por cada 1000 palabras, y una tarea fallida nunca se cobra.
¿Traduce etiquetas, clases o atributos como href?
No, solo se traduce el texto visible y los atributos que llevan idioma, como alt y title; los nombres de etiqueta, class, id y los valores de href quedan sin cambios.
¿Toca el contenido dentro de etiquetas script o style?
No, los bloques script, los bloques style y el código dentro de etiquetas pre o code se dejan exactamente como están escritos.
¿Puedo enviar un documento HTML completo, no solo un fragmento?
Sí, se admiten tanto documentos completos como fragmentos independientes, y la respuesta refleja la misma estructura que usted envió.
¿Puedo traducir muchas páginas por lote?
Sí, envíe una solicitud asíncrona por página y reciba cada archivo traducido a medida que termine, que es como se manejan la mayoría de las migraciones de un sitemap completo.
¿Ya está disponible este endpoint?
Sí, /translate/html está disponible y aceptando solicitudes en este momento.
¿Qué pasa con mi HTML después de traducirlo?
Los archivos de origen y los traducidos se eliminan después del período de retención y nunca se usan para entrenar modelos.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/translate/html \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"…"}'const res = await fetch("https://api.kit.forhosting.com/translate/html", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/translate/html",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/translate/html", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/translate/html", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"text": "…"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "translate.html",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_tokens | 20000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |