La CLI y la API de localización de Lingo.dev admiten dos enfoques para la localización de emails: traducir archivos de plantilla en tiempo de compilación para desplegar plantillas por idioma, o traducir el contenido en tiempo de ejecución antes del envío. Ambos pasan por un motor de localización configurado, con reglas de glosario, voz de marca y selección de modelo aplicadas automáticamente.
Elige tu enfoque#
| Enfoque | Ideal para | Cómo funciona |
|---|---|---|
| Tiempo de compilación (CLI) | Archivos de plantilla: react-email, MJML, HTML | Traduce archivos en tu repositorio y despliega plantillas por idioma |
| Tiempo de ejecución (API) | Contenido dinámico, plantillas renderizadas por el ESP | Llama a la API de localización antes de enviar y pasa el contenido traducido a tu proveedor de email |
¿Qué enfoque elegir?
Si tus plantillas de email viven en tu repositorio como archivos (HTML, MJML o componentes de React), usa el enfoque en tiempo de compilación. Si el contenido de tu email se genera dinámicamente o está almacenado en tu proveedor de servicios de email, usa el enfoque en tiempo de ejecución.
Requisitos previos#
Cada traducción pasa por un motor de localización: la configuración que determina qué modelo de LLM, glosario, voz de marca e instrucciones se aplican. Crea uno en el panel de Lingo.dev y genera una clave de API.
Localización en tiempo de compilación#
La CLI traduce directamente los archivos de plantilla de email. Configura un bucket que coincida con el formato de tu plantilla, ejecuta la CLI y obtén archivos de plantilla por idioma junto a tus plantillas de origen.
Las plantillas de react-email son componentes de React que se renderizan como HTML. Extrae las cadenas traducibles a archivos de recursos JSON con una librería de i18n como react-i18next y luego traduce los archivos JSON con la CLI.
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.15",
"locale": {
"source": "en",
"targets": ["es", "fr", "de", "ja"]
},
"buckets": {
"json": {
"include": ["emails/locales/[locale].json"]
}
}
}En tiempo de renderizado, pasa el idioma a tu componente de email y carga el archivo JSON correspondiente. La función render() de react-email genera HTML específico para cada idioma, listo para enviar.
Ejecuta las traducciones con:
npx lingo.dev@latest runLocalización en tiempo de ejecución#
Cuando el contenido del email es dinámico —notificaciones personalizadas, resúmenes de contenido generado por usuarios o copy de marketing almacenado en un CMS— tradúcelo en tiempo de ejecución antes de enviarlo. Esto sigue el patrón descrito en la guía de la API de traducción.
async function sendLocalizedEmail(userId, templateId, content) {
const user = await db.users.findById(userId);
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({
engineId: "eng_abc123",
sourceLocale: "en",
targetLocale: user.locale,
data: {
subject: content.subject,
preheader: content.preheader,
body: content.body,
},
}),
});
const { data } = await response.json();
await emailProvider.send({
to: user.email,
subject: data.subject,
html: renderTemplate(templateId, data),
});
}Buenas prácticas#
| Área | Recomendación |
|---|---|
| Asuntos | Mantenlos por debajo de 50 caracteres. Usa un glosario para evitar que los nombres de marca se traduzcan. |
| Texto de vista previa | Tradúcelo por separado del cuerpo: los clientes de email lo muestran de forma independiente. |
| Voz de marca | Configura el tono por idioma en el motor de localización. Los emails de marketing en japonés requieren un registro distinto al alemán. |
| Idiomas RTL | Prueba la salida renderizada en clientes de email para árabe, hebreo y persa. El manejo de dir="rtl" en HTML varía según el cliente. |
| Bloqueo de claves | Usa claves bloqueadas para URLs, nombres de productos e identificadores legales que no deben traducirse. |
