La API de localización de Lingo.dev traduce datos de clave-valor mediante un motor de localización configurado. Con una sola llamada HTTP, tus cadenas entran y regresan traducidas, con reglas de glosario, voz de marca y selección de modelo aplicadas automáticamente.
Cuándo usar la API#
Usa la API de localización cuando las traducciones se generan en tiempo de ejecución o en un servicio de backend, no en tiempo de compilación.
| Caso de uso | Ejemplo |
|---|---|
| Contenido dinámico | Traduce descripciones de cursos, títulos de lecciones o preguntas de cuestionarios almacenados en una base de datos |
| Contenido generado por usuarios | Traduce reseñas, comentarios o publicaciones en foros bajo demanda |
| Respuestas de API | Devuelve contenido localizado desde tu backend según el idioma del usuario |
| Notificaciones | Traduce asuntos de correo electrónico, notificaciones push o mensajes dentro de la app antes de enviarlos |
Tiempo de compilación vs. tiempo de ejecución
Si tu contenido está en archivos estáticos (JSON, Markdown, .strings), la CLI o la integración con CI/CD son una mejor opción. La API está diseñada para localizar contenido en el backend.
Requisitos previos#
Crea un motor de localización
Cada llamada a la API se ejecuta a través de un motor de localización: la configuración que determina qué modelo LLM, glosario, voz de marca e instrucciones se aplican. Crea uno en el panel de Lingo.dev.
Genera una clave de API
Las solicitudes a la API se autentican con un encabezado X-API-Key. Genera una clave en la sección API Keys. Las claves se muestran una sola vez al crearlas, así que guarda la tuya de forma segura.
Localizar contenido#
Envía una solicitud POST al endpoint de localización con tu idioma de origen, idioma de destino y tus datos de clave-valor. El esquema completo de solicitud/respuesta está documentado en la referencia de la API.
Este ejemplo traduce un párrafo de un curso de JavaScript al español:
const content = {
intro: "JavaScript is a programming language that powers the interactive elements of most websites. When you click a button, submit a form, or see content update without the page reloading, JavaScript is making that happen.",
};
const response = await fetch("https://api.lingo.dev/process/localize", {
method: "POST",
headers: {
"X-API-Key": "your_api_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
engineId: "eng_abc123",
sourceLocale: "en",
targetLocale: "es",
data: content,
}),
});
const { data } = await response.json();
// {
// intro: "JavaScript es un lenguaje de programacion que impulsa los elementos interactivos de la mayoria de los sitios web. Cuando haces clic en un boton, envias un formulario o ves contenido actualizarse sin que la pagina se recargue, JavaScript lo esta haciendo posible."
// }Las claves se conservan: envías intro y recibes intro. El motor traduce únicamente los valores.
Cómo estructurar las claves#
El objeto data es plano: cada clave corresponde a una sola cadena. Estructura tus claves de forma que aporten contexto semántico:
const content = {
"variables.intro": "Variables are containers for storing data values. In JavaScript, you declare them with let, const, or var.",
"variables.example": "Use const for values that never change, and let for values that do.",
"variables.exercise": "Declare a variable called age and assign it your age as a number.",
};Agrupar las claves por significado ayuda al motor de localización a generar traducciones más coherentes. El motor interpreta todas las claves de una misma solicitud como contexto relacionado: variables.intro y variables.example se traducen de forma más consistente cuando se envían juntas que por separado.
Términos técnicos
Términos como "const" o "let" son jerga de programación que no debe traducirse. Usa un glosario para marcar términos como no traducibles o asignarlos a equivalentes específicos del idioma. Si usas un asistente de programación con IA como Claude Code o Cursor, Localization MCP puede ayudarte a configurar reglas de glosario como parte de tu flujo de trabajo de desarrollo.
Localizar al guardar#
Lo habitual es traducir el contenido cuando se crea o actualiza, no cuando se consulta. Así, el contenido traducido ya está en la base de datos cuando un usuario lo solicita.
app.post("/api/lessons", async (req, res) => {
const lesson = await db.lessons.create(req.body);
const content = {
intro: lesson.intro,
example: lesson.example,
exercise: lesson.exercise,
};
const targetLocales = ["es", "fr", "de", "ja"];
const translations = await Promise.all(
targetLocales.map(async (targetLocale) => {
const response = await fetch("https://api.lingo.dev/process/localize", {
method: "POST",
headers: {
"X-API-Key": process.env.LINGODOTDEV_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
sourceLocale: "en",
targetLocale,
data: content,
}),
});
const { data } = await response.json();
return { locale: targetLocale, data };
})
);
await db.lessonTranslations.insertMany(
translations.map((t) => ({
lessonId: lesson.id,
locale: t.locale,
...t.data,
}))
);
res.json(lesson);
});Así, consultar contenido localizado se convierte en una simple búsqueda en la base de datos, sin necesidad de llamar a la API en el momento de la lectura:
app.get("/api/lessons/:id", async (req, res) => {
const locale = req.query.locale || "en";
if (locale === "en") {
const lesson = await db.lessons.findById(req.params.id);
return res.json(lesson);
}
const translation = await db.lessonTranslations.findOne({
lessonId: req.params.id,
locale,
});
res.json(translation);
});