Traducir Markdown
La documentación escrita en Markdown depende por completo de su sintaxis: un asterisco de más convierte un encabezado en texto plano, una referencia de enlace mal formada rompe la navegación en todo un sitio de documentación. Este endpoint traduce la prosa y deja cada numeral, corchete y valla de código exactamente donde el autor los puso.
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.
Por qué Markdown se resiste a la traducción ingenua
El atractivo entero de Markdown es que la puntuación ligera carga significado estructural: un # al inicio es un encabezado, un par de asteriscos es énfasis, tres comillas invertidas abren un bloque de código. Un traductor que no entiende esa sintaxis reacomodará con gusto una lista con viñetas convirtiéndola en párrafo, o traducirá la palabra dentro de los corchetes de un enlace dejando la URL apuntando a una página que solo existe en inglés. translate.markdown analiza primero el documento como Markdown, así que la traducción solo toca el texto legible para humanos, nunca la sintaxis que le da forma.
Qué se mueve y qué se queda igual
El texto de los párrafos, el texto de los encabezados, el texto de los elementos de lista, el contenido de las celdas de tabla y las etiquetas de los enlaces se traducen. Los bloques de código y los fragmentos de código en línea quedan intactos, porque un ejemplo de código mostrado en un README debe funcionar exactamente igual en cualquier idioma. Las URLs, las rutas de imagen, los identificadores de nota al pie y las claves del front matter se mantienen tal como están escritas; solo los valores del front matter que son prosa genuina, como un título o una descripción, son elegibles para traducción.
Una breve nota sobre el formato en sí
Markdown se diseñó a mediados de los años 2000 para escribir texto con formato usando nada más que un editor de texto plano, y se volvió el formato por defecto para READMEs, documentación técnica y generadores de sitios estáticos porque sigue siendo legible incluso antes de renderizarse. Esa legibilidad como texto plano también lo hace frágil ante una traducción descuidada: a diferencia de HTML, no hay un límite explícito de etiqueta que indique dónde empieza y termina el formato, así que traducir Markdown bien requiere analizar la estructura real del documento en vez de tratarlo como una cadena plana.
Cómo encaja en un flujo de documentación
Un sitio de documentación con una fuente de verdad en inglés y varios idiomas de destino necesita que la traducción corra cada vez que una página cambia, no solo una vez al lanzarse. Enviar el archivo Markdown modificado a /translate/markdown en cada fusión y escribir el resultado en la carpeta del idioma correspondiente mantiene todo actualizado sin que alguien tenga que releer la página completa buscando qué quedó desfasado. Cobrar por palabra en lugar de por archivo hace que una línea nueva en el registro de cambios cueste una fracción de una página completa de referencia de API, así que mantener traducidos los cambios pequeños sigue siendo barato.
Qué puede hacer con ella
Archivos README multilingües
Un proyecto de código abierto traduce su README.md a varios idiomas en cada lanzamiento, manteniendo bloques de código y enlaces de insignias idénticos entre versiones.
Sitios de documentación para desarrolladores
Un sitio de documentación construido con un generador de sitios estáticos traduce automáticamente cada página en Markdown cuando cambia la fuente en inglés, conservando el front matter y los enlaces internos.
Registro de cambios y notas de versión
Un equipo de producto traduce su registro de cambios en Markdown a los idiomas de sus clientes inmediatamente después de cada lanzamiento sin reformatear las viñetas.
Artículos de base de conocimiento
Una wiki interna escrita en Markdown se traduce para oficinas regionales mientras el formato de las tablas y las referencias cruzadas entre artículos permanecen intactas.
Preguntas frecuentes
¿Cómo traduzco un archivo Markdown con la API?
Envíe el contenido en Markdown y el idioma de destino por POST a /translate/markdown, guarde el task_id devuelto y obtenga el archivo traducido por webhook o mediante un enlace firmado válido por 24 horas.
¿Es gratis la API para traducir Markdown?
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.
¿Se traducen los bloques de código por error?
No, los bloques de código y los fragmentos de código en línea siempre quedan intactos, porque los ejemplos de código deben funcionar igual sin importar el idioma que los rodea.
¿Conserva encabezados, listas y tablas?
Sí, los niveles de encabezado, la estructura de listas y el diseño de las tablas se conservan exactamente; solo se traduce el texto legible dentro de ellos.
¿Qué pasa con el front matter al inicio del archivo?
Las claves del front matter no cambian, y solo los valores parecidos a prosa, como un título o una descripción, son elegibles para traducción.
¿Puedo traducir una carpeta entera de documentación por lote?
Sí, envíe una tarea asíncrona por archivo y reciba cada página traducida a medida que termine, lo cual encaja bien con un paso de integración continua que corre en cada cambio de contenido.
¿Ya está disponible este endpoint?
Sí, /translate/markdown está disponible y aceptando solicitudes en este momento.
¿Se guarda mi contenido de documentación después de traducirlo?
No, los archivos de origen y los traducidos se eliminan después del período de retención y nunca se usan para entrenamiento.
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/markdown \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"…"}'const res = await fetch("https://api.kit.forhosting.com/translate/markdown", {
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/markdown",
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/markdown", 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/markdown", 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.markdown",
"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. |