A CLI e a API de localização do Lingo.dev suportam dois modelos para a localização de emails: traduzir ficheiros de template no momento do build para publicar templates por idioma, ou traduzir conteúdo em runtime antes do envio. Em ambos os casos, tudo passa por um motor de localização configurado, com regras de glossário, voz da marca e seleção de modelo aplicadas automaticamente.
Escolha a abordagem certa#
| Abordagem | Mais indicado para | Como funciona |
|---|---|---|
| Build-time (CLI) | Ficheiros de template — react-email, MJML, HTML | Traduza os ficheiros no seu repositório e faça deploy de templates por idioma |
| Runtime (API) | Conteúdo dinâmico, templates processados pelo ESP | Chame a API de localização antes do envio e passe o conteúdo traduzido ao seu fornecedor de email |
Que abordagem deve escolher?
Se os seus templates de email estiverem no repositório sob a forma de ficheiros (HTML, MJML ou componentes React), use a abordagem de build-time. Se o conteúdo do email for gerado dinamicamente ou estiver armazenado no seu fornecedor de serviços de email, use a abordagem de runtime.
Pré-requisitos#
Cada tradução passa por um motor de localização — a configuração que determina que modelo LLM, glossário, voz da marca e instruções são aplicados. Crie um no dashboard do Lingo.dev e gere uma chave de API.
Localização em build-time#
A CLI traduz diretamente os ficheiros de template de email. Configure um bucket compatível com o formato do seu template, execute a CLI e obtenha ficheiros de template por idioma ao lado dos templates de origem.
Os templates react-email são componentes React que geram HTML. Extraia as strings traduzíveis para ficheiros de recursos JSON com uma biblioteca de i18n como react-i18next e, depois, traduza os ficheiros JSON com a 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"]
}
}
}No momento da renderização, passe o idioma ao seu componente de email e carregue o ficheiro JSON correspondente. A função react-email render() gera HTML específico para cada idioma, pronto a enviar.
Execute as traduções com:
npx lingo.dev@latest runLocalização em runtime#
Quando o conteúdo do email é dinâmico — notificações personalizadas, resumos de conteúdo gerado pelo utilizador ou copy de marketing armazenada num CMS — traduza-o em runtime antes do envio. Isto segue o padrão descrito no guia da API de Tradução.
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),
});
}Boas práticas#
| Área | Recomendação |
|---|---|
| Assuntos | Mantenha-os abaixo dos 50 caracteres. Use um glossário para evitar a tradução de nomes de marca. |
| Texto de pré-visualização | Traduza-o separadamente do corpo — os clientes de email apresentam-no de forma independente. |
| Voz da marca | Configure o tom por idioma no motor de localização. Emails de marketing em japonês exigem um registo diferente dos emails em alemão. |
| Idiomas RTL | Teste o resultado renderizado em clientes de email para árabe, hebraico e persa. O tratamento de HTML dir="rtl" varia de cliente para cliente. |
| Bloqueio de chaves | Use chaves bloqueadas para URLs, nomes de produtos e identificadores legais que não devem ser traduzidos. |
