blog 18ways
Uma forma nativa de IA de fazer i18n no Next.js, sem prejudicar o SEO.
Internacionalização (muitas vezes abreviada para i18n), localização (l10n) e suporte multilíngue descrevem a mesma ideia: adaptar seu produto para que as pessoas possam usá-lo no próprio idioma.
Toda empresa acaba percebendo que precisa dar suporte a vários idiomas. Nesse ponto, o time de produto se recosta como um mecânico, puxa o ar entre os dentes e diz: “Quantas páginas estamos falando? Isso dá pelo menos quatro sprints.”

A forma subjacente como implementamos i18n não mudou em 20 anos. A maioria das “boas práticas” de i18n foi definida muito antes das arquiteturas web modernas, e tudo o que veio depois foi simplesmente sobreposto a elas.
I18n é a única parte do desenvolvimento web moderno que ainda envolve exportar arquivos e enviá-los para alguém. É considerado um setup moderno se, em vez de mandar por e-mail, você os envia por meio de uma API.
Num mundo de pipelines de CI e deploys medidos em minutos, em vez de dias, provavelmente devemos nos considerar sortudos por não precisar enviar nada por fax.
O desenvolvimento web moderno avançou incrivelmente rápido.
Temos:
Ainda assim, os fluxos de trabalho de internacionalização continuam parecendo pertencer a outra era.
Mesmo aplicações relativamente pequenas acabam rapidamente tendo que lidar com:
Os desenvolvedores não começam querendo construir sistemas assim. Eles acabam entrando nisso por acidente, quando obstáculos comuns de i18n pegam de surpresa desenvolvedores que não estão familiarizados com o fato de que idiomas diferentes estruturam frases de formas completamente diferentes… e acabam aceitando, a contragosto, o status quo definido há 20 anos.
Com o tempo, a internacionalização se torna uma das partes mais complexas da stack.
Considere uma interface simples:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>Isto é fácil de entender. É simples.
Em algum momento, decidimos internacionalizá-lo. Então, extraímos o texto para um arquivo de tradução:
{
"mainPage": {
"greeting": "Hello world",
"cta": "<0>Click here</0> to view your <1>{{description}}</1>"
}
}E referenciamos isso no nosso código:
<h1>{t('mainPage.greeting')}</h1>
<p>
<Trans key="mainPage.cta">
<a href="#/">Click here</a> to view your <b>{{ description: serverResponse.productDescription }}</b>
</Trans>
</p>Mas, espere, agora temos texto em inglês tanto no nosso código quanto no nosso arquivo de tradução? Sim. Diferentes bibliotecas de i18n colocam verniz diferente nisso, mas tentar traduzir texto que é parcialmente formatado ao extraí-lo para um arquivo JSON legível por humanos é uma batalha perdida.
A UI moderna é estruturada, mas os sistemas de tradução são construídos sobre a base de strings planas.
Quando entram em cena marcação, variáveis e conteúdo dinâmico, a abstração começa a vazar.
As coisas ficam ainda mais difíceis quando o conteúdo não é estático.
Tome este exemplo novamente:
<b>{serverResponse.productDescription}</b>Essa string vem de uma API. Como transformamos isso em uma chave de tradução?
Spoiler: você não precisa. Agora seu backend também precisa dar suporte à internacionalização.
Seu backend agora precisa gerenciar:
De repente, os tradutores também precisam ter acesso aos sistemas de backend.
E o problema só aumenta quando conteúdo gerado por usuários entra em cena.
Avaliações. Comentários. Anúncios em marketplaces. Fóruns.
Os pipelines tradicionais de i18n partem do pressuposto de que os desenvolvedores controlam todo o texto. Cada vez mais, isso simplesmente não é verdade.
O fato de empresas como a Amazon terem começado a experimentar avaliações de usuários traduzidas em 2026 diz muito sobre o quão lentamente o ecossistema de i18n evoluiu.
Até mesmo determinar qual idioma um usuário quer é surpreendentemente complicado.
Os navegadores enviam preferências de idioma pelo cabeçalho Accept-Language:
Accept-Language: en-GB,en;q=0.9,fr;q=0.8Isso diz ao servidor:
Na prática, implementar isso corretamente envolve:
en, en-GB, en-US)Muitos frameworks deixam a maior parte dessa lógica para os desenvolvedores.
Até mesmo a detecção básica de localidade muitas vezes vira código personalizado da aplicação.
A infraestrutura de tradução é só metade do problema.
Ainda assim, os usuários precisam de um jeito de trocar de idioma.
A maioria das bibliotecas de i18n fornece a camada de tradução, mas deixa o resto do problema para o desenvolvedor:
hreflang para SEOEsses detalhes parecem pequenos, mas rapidamente se tornam uma quantidade significativa de infraestrutura da aplicação, especialmente se você não estiver familiarizado com todas as complexidades de i18n. A maioria das empresas e dos desenvolvedores não está.
Diante de toda essa complexidade, algumas equipes recorrem a ferramentas automáticas de tradução de sites. Essas plataformas prometem traduzir seu site automaticamente com o mínimo de esforço.
Várias empresas estão construindo versões cada vez mais sofisticadas dessa ideia. Infelizmente, elas introduzem um conjunto diferente de problemas:
O resultado costuma ser um site que, tecnicamente, oferece suporte a vários idiomas, mas entrega uma experiência visivelmente pior e é uma caixa-preta para os desenvolvedores trabalharem.
Começamos com algo lindamente simples:
<h1>Hello world!</h1>
<p>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</p>E acabaram com chaves de tradução, dicionários JSON, pipelines fragmentados, camadas de localização separadas entre backend e frontend e ferramentas externas de tradução.
Aplicativos web modernos são sistemas incrivelmente sofisticados. Ainda assim, as ferramentas de i18n esperam fluxos de trabalho pensados para outra época, como uma Ferrari com manivela para dar partida no motor.
E se a internacionalização fosse mais ou menos assim?
<h1><T>Hello world!</T></h1>
<p>
<T>
<a href="#/">Click here</a> to view your <b>{serverResponse.productDescription}</b>
</T>
</p>Sem chaves de tradução.
Sem dicionários JSON.
Sem pipelines manuais.
Só texto.
Essa ideia é a base por trás do 18ways.
18ways trata a tradução como uma preocupação otimizada em tempo de execução. Extrair chaves de tradução e gerenciar arquivos de tradução é um problema para máquinas, não para humanos.
Os desenvolvedores simplesmente marcam o texto que querem traduzir.
Nos bastidores, a 18ways:
Tudo continua compatível com SSR e seguro para SEO.
Sistemas tradicionais de i18n perdem o contexto.
Um tradutor pode ver algo como:
homeMas o que isso quer dizer?
Em alemão, esses significados exigem palavras completamente diferentes:
Haus - uma casaStartseite - a página inicialStart - um rótulo de navegaçãozum Anfang - voltar ao começoSe você tivesse que traduzir “home” para o alemão, o que preferiria ver? Uma string isolada ou a página em que ela realmente aparece?

Sistemas de tradução que só veem strings isoladas têm dificuldade com essas distinções.
A 18ways analisa traduções no contexto da UI real.
Nossos agentes de backend revisam as traduções conforme elas aparecem nas páginas reais e otimizam para:
Para quem conhece substantivos compostos em alemão, não se preocupe: a detecção de overflow também está incluída.
Tudo o que ajuda a IA a produzir traduções melhores também ajuda tradutores humanos.
O 18ways oferece aos tradutores o mesmo ambiente sensível ao contexto que nossos agentes de IA usam.
Em vez de editar arquivos JSON, os tradutores revisam o texto diretamente na UI em que ele aparece.
Isso melhora drasticamente a precisão da tradução e a eficiência do fluxo de trabalho.
A internacionalização não precisa de outra camada de chaves de tradução, arquivos de strings e cola de pipeline.
Aplicativos modernos já têm a estrutura, o contexto e as informações de tempo de execução de que precisamos para fazer isso melhor.
A próxima geração de i18n deve ser construída para apps renderizados no servidor, conteúdo dinâmico, fluxos de trabalho nativos de IA e tradutores humanos trabalhando lado a lado.
Essa é a direção que a 18ways está tomando.