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.
Qué se traduce y qué se comparte
Sección titulada «Qué se traduce y qué se comparte»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.
Cómo añadir un idioma
Sección titulada «Cómo añadir un idioma»Para añadir y editar traducciones necesitas el rol Propietario, Administrador o Desarrollador.
- 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.
- Haz clic en Añadir idioma.
- En Idioma, elige un idioma de la lista o escribe su código (p. ej.
pt-BR) y elige Usar «pt-BR». - 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.
- 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.
Editar una traducción
Sección titulada «Editar una traducción»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.
Etiquetas Desactualizada y Automática
Sección titulada «Etiquetas Desactualizada y Automática»- 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.
Versiones y reversión
Sección titulada «Versiones y reversión»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.
Cambiar el idioma predeterminado
Sección titulada «Cambiar el idioma predeterminado»El idioma predeterminado está en Ajustes → General → Idioma predeterminado. Puedes elegir cualquier idioma, salvo uno que ya tenga una variante: elimina antes esa variante.
Enviar en un idioma
Sección titulada «Enviar en un idioma»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.
Cómo se elige el idioma
Sección titulada «Cómo se elige el idioma»Para un locale solicitado, Frontmail usa:
- sin
locale→ el idioma predeterminado, - una coincidencia exacta (sin distinguir mayúsculas y minúsculas) → ese idioma,
- el mismo idioma base →
de-ATobtienede;ptobtiene una variantept-…comopt-BR, - 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" }API REST
Sección titulada «API REST»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-compatenvían siempre el idioma predeterminado.
El formato sigue el idioma del correo
Sección titulada «El formato sigue el idioma del correo»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.
Traducción automática
Sección titulada «Traducción automática»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.
Cómo configurar la clave de un proveedor
Sección titulada «Cómo configurar la clave de un proveedor»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.
- Abre Ajustes → Traducción automática.
- Junto al proveedor, haz clic en Añadir clave. Conseguir una clave de … abre la página de claves del proveedor.
- 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.
- 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.
Qué se envía al proveedor
Sección titulada «Qué se envía al proveedor»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.
Cómo se comprueba el resultado
Sección titulada «Cómo se comprueba el resultado»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).
Límites y costes
Sección titulada «Límites y costes»- 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.
Límites
Sección titulada «Límites»- 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 e importar
Sección titulada «Exportar e importar»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.