Ir al contenido

Traducciones de plantillas

Una plantilla se puede enviar en varios idiomas. Tiene un idioma predeterminado y hasta 29 variantes de idioma (traducciones). El ID de la plantilla es el mismo en todos los idiomas, así que tu código solo tiene que añadir el idioma que quiere – por ejemplo locale: 'de' – y Frontmail elige la variante correcta.

Sirve cualquier idioma, no solo los ocho idiomas del panel: usa una etiqueta de idioma BCP 47 como hu, nl o pt-BR.

Cada variante tiene su propio:

  • Asunto,
  • cuerpo HTML,
  • versión de texto (generada automáticamente a partir del HTML de la variante o escrita a mano),
  • Nombre del remitente: opcional; déjalo vacío para usar el nombre del remitente del idioma predeterminado.

Todo lo demás se define una sola vez, en el idioma predeterminado, y lo comparten todos los idiomas: los destinatarios (Para, CC, CCO, Reply-To), el Correo del remitente, los parámetros, Incrustar CSS al guardar, el servicio, los ajustes de protección, los archivos adjuntos, la respuesta automática y la recogida de contactos.

Es intencionado: las reglas de seguridad de una plantilla – destinatarios dinámicos, el bloqueo del contenido, los campos fijos del remitente y la validación de parámetros – están en un solo lugar, así que una traducción nunca puede relajarlas. Una variante solo puede usar parámetros que existan en el idioma predeterminado.

Para añadir y editar traducciones necesitas el rol Propietario, Administrador o Desarrollador.

  1. Abre la plantilla. Encima de las pestañas del editor está la barra Idiomas con el idioma predeterminado (marcado como Predeterminado) y una etiqueta por cada variante.
  2. Haz clic en Añadir idioma.
  3. En Idioma, elige un idioma de la lista o escribe su código (p. ej. pt-BR) y elige Usar «pt-BR».
  4. En Empezar desde, elige:
    • Copia del idioma predeterminado: traduces el texto tú mismo,
    • Traducción automática: la traduce el proveedor con la clave propia de tu organización (consulta Traducción automática); si has configurado más de uno, elige el proveedor en Servicio,
    • Vacía: asunto y HTML en blanco.
  5. Haz clic en Añadir idioma, traduce o revisa el contenido y haz clic en Guardar.

El idioma nuevo es un borrador (marcado como nuevo) hasta que lo guardas. La traducción automática usa solo el idioma predeterminado guardado: sus cambios sin guardar no se incluyen.

Haz clic en un idioma de la barra Idiomas para cambiar el editor a ese idioma. El editor muestra Estás editando la traducción: … y funciona como siempre:

  • Contenido: el asunto y las pestañas HTML, Visual y Texto editan la variante. Los Datos de ejemplo y la vista previa son comunes, y la vista previa renderiza la variante tal y como se enviará. Los Parámetros son aquí de solo lectura (Los parámetros son comunes a todos los idiomas. Edítalos en el idioma predeterminado.).
  • Ajustes: solo el asunto, el Nombre del remitente y el ajuste de la versión de texto pertenecen a la variante; los campos compartidos llevan la nota Común a todos los idiomas.
  • Fragmentos y Enviar prueba tienen un campo Idioma, así que puedes copiar el código o enviar un correo de prueba en cualquier idioma.

Las Comprobaciones también comparan la variante con el idioma predeterminado: un parámetro que solo existe en la traducción es un error (añádelo primero al idioma predeterminado); un parámetro que se usa en el idioma predeterminado pero falta en la traducción es una advertencia.

  • Desactualizada: el idioma predeterminado se volvió a guardar después de guardar esta traducción, así que puede faltarle algo. Los envíos siguen funcionando. Actualiza la traducción y guárdala o, si sigue siendo válida, haz clic en Marcar como actualizada.
  • Automática: la versión guardada viene de una traducción automática. Revísala antes de confiar en ella.

Con una variante seleccionada, la barra ofrece además Traducir de nuevo (una nueva traducción automática del idioma predeterminado guardado; no se guarda nada hasta que haces clic en Guardar) y Eliminar idioma. Al eliminar un idioma se eliminan también sus versiones, y los correos que lo pidan se envían en el idioma predeterminado.

Cada vez que guardas una traducción se crea una versión nueva de esa traducción: cada idioma tiene su propia numeración de versiones. Con una variante seleccionada, la pestaña Versiones muestra Versiones de la traducción … con Basada en (la versión del idioma predeterminado sobre la que se guardó) y Origen (Manual o Automática). Compara versiones y vuelve a una anterior con Restaurar, igual que con el idioma predeterminado.

Un mensaje siempre registra el idioma y la versión de la traducción con los que se renderizó. Los correos que esperan en la cola de correos retenidos se envían con las versiones que eran las actuales cuando se aceptaron.

El idioma predeterminado está en Ajustes → General → Idioma predeterminado. Puedes elegir cualquier idioma, salvo uno que ya tenga una variante: elimina antes esa variante.

El idioma lo elige siempre explícitamente quien envía. Frontmail no lo adivina a partir del navegador (Accept-Language): si lo quieres, pasa tú mismo el idioma del visitante.

Para un locale solicitado, Frontmail usa:

  1. sin locale → el idioma predeterminado,
  2. una coincidencia exacta (sin distinguir mayúsculas y minúsculas) → ese idioma,
  3. el mismo idioma base → de-AT obtiene de; pt obtiene una variante pt-… como pt-BR,
  4. en otro caso → el idioma predeterminado.

Un idioma desconocido no es un error: locale es una preferencia. Solo una etiqueta mal formada (p. ej. "german!") se rechaza con 400 invalid_body.

La respuesta indica qué idioma se usó realmente:

{ "message_id": "msg_…", "status": "queued", "status_token": "…", "locale": "de" }

Añade locale a POST /v1/send (y a cada mensaje de POST /v1/send-batch):

{
"template_id": "tpl_01J9…",
"template_params": { "name": "Jana" },
"locale": "de"
}

POST /v1/send-form usa el campo de formulario reservado fm_locale. Un campo llamado locale sigue siendo un parámetro normal de la plantilla, así que los formularios existentes siguen funcionando:

<select name="fm_locale">
<option value="en">English</option>
<option value="de">Deutsch</option>
</select>

Todos los SDKs tienen una opción locale y devuelven el idioma usado en result.locale.

Navegador (@frontmail/browser): sendForm lo envía como fm_locale; el campo fm_locale propio del formulario tiene prioridad:

const result = await send('svc_01J9…', 'tpl_contact', { name: 'Jana' }, { locale: 'de' });
await sendForm('svc_01J9…', 'tpl_contact', '#contact', { locale: document.documentElement.lang });
console.log(result.locale); // 'de'

React (@frontmail/react): la prop locale de <FrontmailForm>, o options.locale de send / sendForm. Vue y Svelte funcionan igual:

<FrontmailForm serviceId="svc_01J9…" templateId="tpl_contact" locale="de">…</FrontmailForm>
const { send } = useSendEmail('svc_01J9…', 'tpl_contact');
await send({ name: 'Jana' }, { locale: 'de' });

Node.js (@frontmail/node):

const { locale } = await frontmail.send({ templateId: 'tpl_order', params: { order_id: 'A-1042' }, locale: 'de' });
await frontmail.sendBatch([{ templateId: 'tpl_reminder', params: { name: 'Jana' }, locale: 'cs' }]);

Android / Kotlin (dev.frontmail:frontmail):

val result = frontmail.send(
"tpl_contact",
mapOf("name" to name),
options = SendOptions(locale = Locale.getDefault().toLanguageTag()),
)
println(result.locale) // "de"

iOS / Swift (Frontmail para Swift): usa Locale.preferredLanguages.first (p. ej. de-AT); Locale.current.identifier usa _ y no es una etiqueta válida:

let result = try await frontmail.send(
templateID: "tpl_contact",
params: ["name": "Jan"],
options: SendOptions(locale: Locale.preferredLanguages.first)
)
print(result.locale ?? "default") // "de"

Flutter / Dart (frontmail): usa toLanguageTag() (p. ej. de-AT); Locale.toString() usa _ y no es una etiqueta válida:

final result = await frontmail.send(
templateId: 'tpl_contact',
params: {'name': 'Jan'},
options: SendOptions(locale: Localizations.localeOf(context).toLanguageTag()),
);
print(result.locale ?? 'default'); // "de"

React Native usa send(params, { locale: 'de' }) de useSendEmail. npx frontmail types enumera los idiomas de cada plantilla y genera un tipo para ellos; consulta Node.js.

Respuestas automáticas, reenvíos y EmailJS

Sección titulada «Respuestas automáticas, reenvíos y EmailJS»
  • Las respuestas automáticas siguen el idioma del mensaje original: la plantilla de respuesta automática elige su propia variante para ese idioma con las mismas reglas (y, si no la tiene, usa su idioma predeterminado).
  • Reenviar en el Historial vuelve a enviar el mensaje en el mismo idioma, con la versión actual de la traducción. Si ese idioma se ha eliminado desde entonces, se usa el idioma predeterminado.
  • Las rutas compatibles con EmailJS (/api/v1.0/email/…) y @frontmail/emailjs-compat envían siempre el idioma predeterminado.

El correo se renderiza en el idioma en que se envía. formatDate, formatNumber y formatMoney formatean fechas, números e importes para ese idioma (una variante alemana muestra 1. Oktober 2026 y 49,00 €). El pie Enviado con Frontmail del plan Free aparece en el idioma del correo si es uno de los ocho idiomas del panel; si no, en inglés.

Frontmail puede traducir una plantilla por ti con OpenAI, Anthropic, Google Gemini o DeepL, usando la clave API propia de tu organización («trae tu propia clave»). Frontmail nunca traduce por su cuenta y la traducción automática no gasta créditos de Frontmail: el proveedor factura el uso a tu cuenta.

La traducción automática es siempre manual: solo se ejecuta cuando eliges Traducción automática en Añadir idioma o haces clic en Traducir de nuevo, y el resultado es un borrador que revisas antes de guardarlo.

Solo los Propietarios y Administradores pueden añadir o cambiar claves. Los Desarrolladores ven qué proveedores están configurados (en modo de solo lectura) y pueden usarlos para traducir.

  1. Abre Ajustes → Traducción automática.
  2. Junto al proveedor, haz clic en Añadir clave. Conseguir una clave de … abre la página de claves del proveedor.
  3. Pega la Clave API. Para OpenAI, Anthropic y Gemini puedes indicar un Modelo (opcional); déjalo vacío para usar el modelo predeterminado del proveedor. DeepL no permite elegir modelo.
  4. Haz clic en Guardar clave. Antes de guardarla, Frontmail comprueba la clave con una pequeña solicitud al proveedor.

Si tienes más de un proveedor, haz clic en Usar como predeterminado para elegir cuál aparece preseleccionado. Sustituir clave y Quitar están junto a cada proveedor configurado; al quitar una clave se conservan las traducciones que ya guardaste.

La clave se guarda cifrada y no se vuelve a mostrar: el panel solo enseña sus cuatro últimos caracteres. Cada cambio queda registrado en el registro de auditoría.

Solo el asunto, el HTML, la versión de texto y el nombre del remitente del idioma predeterminado guardado; la versión de texto, únicamente si está escrita a mano (una automática se genera a partir del HTML traducido). Nada más sale de Frontmail: ni destinatarios, ni valores de parámetros, ni datos de ejemplo, ni contactos, ni el historial de mensajes. La solicitud va directamente de los servidores de Frontmail a la API oficial del proveedor, y al contenido se le aplican las condiciones del propio proveedor.

Frontmail pide al proveedor que no cambie las expresiones de Handlebars ({{name}}, {{#if …}}), las etiquetas y atributos HTML, los enlaces ni las direcciones de correo, y después lo verifica: la traducción debe contener exactamente las mismas expresiones de Handlebars y las mismas URL de enlaces e imágenes que el original. Si no es así, el resultado se descarta con La traducción automática cambió parámetros, enlaces o la estructura HTML, así que no se ha usado. (translation_invalid): inténtalo de nuevo o usa otro proveedor. Nunca se guarda nada a medias.

Otros errores: translation_not_configured (no hay ninguna clave configurada), translation_provider_auth (el proveedor rechazó la clave) y translation_provider_error (el proveedor falló: inténtalo más tarde).

  • 30 traducciones automáticas por hora por organización.
  • 60 000 caracteres de contenido original por traducción; las plantillas más largas reciben payload_too_large.
  • Una traducción tiene 60 segundos para terminar.
  • Los costes los cobra el proveedor a la cuenta a la que pertenece la clave. Traducir no gasta créditos de Frontmail, y enviar un correo traducido cuesta el mismo crédito que cualquier otro.
  • 30 idiomas por plantilla: el idioma predeterminado más 29 variantes.
  • Una variante tiene los mismos límites de tamaño que el contenido de la propia plantilla.
  • Las etiquetas de idioma tienen como máximo 35 caracteres.

Exportar (.json) incluye todas las variantes de idioma, e Importar las vuelve a crear en la plantilla nueva. Los archivos exportados antiguos sin variantes se siguen importando como antes.