A CLI e a API de localização do Lingo.dev oferecem duas abordagens para localização de e-mails: traduzir arquivos de template no build para publicar templates por idioma, ou traduzir o conteúdo em tempo de execução antes do envio. Em ambos os casos, tudo passa por um engine de localização configurado, com regras de glossário, voz da marca e seleção de modelo aplicadas automaticamente.
Escolha sua abordagem#
| Abordagem | Ideal para | Como funciona |
|---|---|---|
| Build-time (CLI) | Arquivos de template — react-email, MJML, HTML | Traduza os arquivos no seu repositório e faça o deploy de templates por idioma |
| Runtime (API) | Conteúdo dinâmico, templates renderizados pelo ESP | Chame a API de localização antes do envio e passe o conteúdo traduzido para seu provedor de e-mail |
Qual abordagem escolher?
Se seus templates de e-mail ficam no repositório como arquivos (HTML, MJML ou componentes React), use a abordagem de build-time. Se o conteúdo do e-mail é gerado dinamicamente ou armazenado no seu provedor de serviço de e-mail, use a abordagem de runtime.
Pré-requisitos#
Toda tradução passa por um engine de localização — a configuração que define qual modelo de LLM, glossário, voz da marca e instruções serã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 arquivos de template de e-mail. Configure um bucket compatível com o formato do seu template, execute a CLI e obtenha arquivos de template por idioma ao lado dos templates de origem.
Os templates react-email são componentes React que renderizam em HTML. Extraia as strings traduzíveis para arquivos de recurso JSON usando uma biblioteca de i18n como react-i18next e, depois, traduza os arquivos 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"]
}
}
}Na hora da renderização, passe o idioma para o componente de e-mail e carregue o arquivo JSON correspondente. A função react-email render() gera HTML específico por idioma, pronto para envio.
Execute as traduções com:
npx lingo.dev@latest runLocalização em runtime#
Quando o conteúdo do e-mail é dinâmico — como notificações personalizadas, resumos de conteúdo gerado por usuários ou texto de marketing armazenado em um CMS — traduza tudo em tempo de execução antes do envio. Isso 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 |
|---|---|
| Assunto | Mantenha abaixo de 50 caracteres. Use um glossário para evitar a tradução de nomes de marca. |
| Texto de prévia | Traduza separadamente do corpo do e-mail — os clientes de e-mail exibem esse texto de forma independente. |
| Voz da marca | Configure o tom por idioma no engine de localização. E-mails de marketing em japonês exigem um registro diferente dos em alemão. |
| Idiomas RTL | Teste a saída renderizada em clientes de e-mail para árabe, hebraico e persa. O tratamento de HTML dir="rtl" varia entre clientes. |
| Bloqueio de chaves | Use chaves bloqueadas para URLs, nomes de produtos e identificadores legais que não devem ser traduzidos. |
