Sites multilíngues

Como traduzir o site barato com Cloudflare Workers e GPT

O fluxo que eu usei no n8n: TranslatePress no WordPress, Assistants da OpenAI para idiomas fora da Cloudflare, e o Worker de tradução com 100 mil requisições grátis por dia.

Assistir ao vídeo original no YouTube
Thumbnail do vídeo: Automatizando tradução de forma gratuita ou barata com Cloudflare e GPT

Eu estava pagando a API do Google Tradutor pelo TranslatePress e a conta doía. Na época da gravação, cada milhão de caracteres saía por volta de 120 reais. WordPress ou sistema próprio, tanto faz: a string precisa sair do banco, passar por um tradutor e voltar. Este texto é o caminho que eu montei para gastar o mínimo — de graça na Cloudflare, ou barato no GPT quando o idioma não entra no Worker.

No n8n, um fluxo a cada minuto pega as linhas novas do MySQL, escolhe um idioma e manda traduzir. Idioma que a Cloudflare cobre vai para um Worker do template de tradução, com até 100 mil requisições por dia no plano gratuito. O resto vai para um Assistant da OpenAI por idioma, para eu não pagar de novo os tokens da instrução. Filtro no caminho impede frase crua de entrar no banco.

Dor
API do Google Tradutor a ~R$ 120 por milhão de caracteres
Grátis
Worker de tradução, 100 mil requisições/dia
Barato
Assistant da OpenAI por idioma, no n8n

O TranslatePress fala com o Google. Eu não quis mais pagar esse preço

O site da gravação é WordPress com TranslatePress. Nativo, o plugin chama a API de tradução do Google. Funciona. O problema é a fatura. Eu falei em cerca de 120 reais a cada milhão de caracteres. Em site grande, com vários idiomas, isso não é detalhe. É linha que compete com hospedagem.

Eu fui atrás de duas saídas. A primeira: GPT da OpenAI. Tem falha. Com instrução bem feita e filtro depois, ele traduz direito e você segura a frase que voltou no idioma de origem. A segunda: Cloudflare. Na época, o painel de Workers já oferecia um template de aplicativo de tradução. Sem passar pelo Google. Sem passar pela OpenAI, se o idioma estiver na lista do Worker.

Por que n8n, e não Make nem Zapier

O fluxo vive no n8n. É open source. Eu instalo no servidor e não tenho teto de cenário, só o teto da máquina. Make é mais barato que Zapier, mas ainda cobra por operação. Zapier, para o volume que eu mando, é absurdo. Nenhum dos dois me deixou abrir o MySQL por túnel SSH. O n8n deixou. Foi isso que decidiu. O banco do WordPress não fica exposto na internet; o n8n entra pelo túnel, lê a tabela, escreve a tradução.

Quem não programa monta o mesmo desenho pedindo ajuda ao ChatGPT: JSON, JavaScript no nó, conexão. O que importa é ter a string em algum lugar — tabela, documento, arquivo. CMS próprio entra no mesmo desenho. Eu não ensino o código linha a linha neste texto. Na gravação eu deixei isso no material do Site Rentável. Aqui vai o que o fluxo faz, para você reproduzir com a cabeça no lugar.

O fluxo de um em um minuto, e o Assistant que economiza a instrução

O workflow dispara a cada minuto. Um trecho em JavaScript sorteia o idioma daquela rodada. Com o idioma na mão, o n8n aponta para o banco certo, pega as linhas mais recentes ainda sem tradução e manda o texto. Sem sorteio, você ficaria martelando um idioma só enquanto os outros envelhecem na fila.

Eu não mando isso para o Chat Completions com a instrução colada em toda requisição. Mando para um Assistant. A diferença, na API daquela época, é que os tokens da instrução do Assistant não entram na conta do mesmo jeito que entram no chat. Eu criei um Assistant por idioma. Cada chamada economizava por volta de 60 tokens. Em string curta — um botão, um item de menu — a instrução custa mais que a frase. Sem Assistant, eu pagava para repetir “traduza para italiano, preserve HTML” mil vezes ao dia.

No caminho de volta tem filtro. Se o modelo devolve a frase no idioma de origem, ou devolve lixo, isso não grava. Só então o n8n escreve no MySQL. Sem esse freio, o painel do TranslatePress enche de “tradução” que é o texto original com cara de concluído.

  1. Instale o n8n no servidor e abra o MySQL do WordPress por túnel SSH, não por porta pública.
  2. Crie um fluxo com gatilho de um em um minuto e um nó que sorteie o idioma da rodada.
  3. Busque no banco as linhas mais novas daquele idioma que ainda não têm tradução.
  4. Mande a string para o Worker da Cloudflare se o idioma estiver na lista; senão, para o Assistant daquele idioma.
  5. Filtre resposta vazia, resposta igual à origem e HTML quebrado antes do UPDATE.
  6. Grave só o texto limpo na tabela do TranslatePress e passe para a próxima linha.

O Worker de tradução: 100 mil requisições por dia, sem Assistant por idioma

Na Cloudflare o desenho muda. Eu não crio um Assistant por língua. O código do Worker já traz a lista de idiomas que o modelo cobre. O n8n manda GET ou POST para a URL do Worker com o texto e o destino. A resposta volta traduzida. Eu mostrei na tela o original de um lado e a tradução do outro, depois o UPDATE no banco.

Para subir: Workers, criar aplicação, escolher o template de tradução. No plano gratuito da Cloudflare, o Worker aguenta 100 mil requisições por dia, com a cota zerando à meia-noite UTC. Eu não vi custo de CPU nesse uso. String curta, modelo de tradução, pouca conta. Se no futuro a Cloudflare passar a cobrar a IA do Worker, ainda assim deve sair abaixo do GPT e muito abaixo da API do Google. CDN grátis no mundo inteiro já era o recado da empresa; o Worker entra na mesma lógica de baratear o que o Google Cloud encarece.

Limite honesto: o template só fala as línguas que o modelo carrega. O que ficar de fora continua no GPT. Não misture as duas contas no mesmo nó sem olhar o código de idioma. Português para espanhol cabe no Worker. Um par exótico pode não caber.

Google Sheets eu ainda não liguei. O código deste fluxo eu não solto aqui

A terceira ideia da gravação ficou para depois: fórmula no Google Sheets usando a tradução do Google, de graça no limite da planilha. É mais delicado. Tem cota, tem atraso, tem o jeito de puxar a célula de volta para o n8n. Eu não tinha o fluxo pronto. Fica como pista, não como receita.

Eu também não colo o Worker nem o JSON do n8n aqui. Não é mistério de marketing barato: é o material que eu reservei para quem entra no Site Rentável, junto com o resto de tradução em escala e conteúdo automático. O que você precisa para decidir já está acima. String, fila, filtro, Worker quando der, Assistant quando o Worker não cobrir. Se o seu site ainda manda tudo para a API do Google porque o TranslatePress veio assim de fábrica, essa é a linha que vale cortar primeiro.

  • API do Google Tradutor no TranslatePress: cara, nativa, previsível.
  • Worker de tradução na Cloudflare: 100 mil requisições/dia no gratuito, lista fechada de idiomas.
  • Assistant da OpenAI por idioma: cobre o que o Worker não fala e segura o custo da instrução.
  • n8n no servidor com túnel SSH: o único dos três (n8n, Make, Zapier) que eu consegui plugar no MySQL assim.
  • Filtro antes do banco: sem ele, o site publica a frase original como se fosse tradução.

Na sequência

  1. Some o milhão de caracteres que o TranslatePress já mandou para o Google neste mês antes de achar que “está barato”.
  2. Confira se o n8n alcança o MySQL por SSH. Se a porta 3306 está na internet, feche isso antes de traduzir.
  3. Liste os idiomas do site e marque quais o Worker de tradução da Cloudflare aceita.
  4. Crie um Assistant por idioma que ficou de fora, com a instrução fixa lá, não no corpo de cada chamada.
  5. Coloque o filtro de “voltou igual” antes de qualquer UPDATE.
  6. Olhe a cota de 100 mil requisições/dia se o Worker estiver no plano gratuito.
  7. Não publique o primeiro lote sem abrir dez páginas no idioma de destino.

Onde isso quebra

Deixar o TranslatePress no Google Tradutor “só enquanto testa” e descobrir a fatura no cartão.

Mandar a instrução inteira em toda chamada do GPT em string de três palavras.

Gravar no banco a resposta crua do modelo, inclusive quando ele recusou traduzir.

Expor o MySQL para o Make conectar, porque o túnel SSH “é complicado”.

Achar que o template de tradução da Cloudflare fala qualquer par de idiomas.

Copiar um fluxo da internet sem o filtro e lotar a tabela de texto original.

Perguntas frequentes

Isso substitui o TranslatePress?

Não. O plugin continua organizando o site em vários idiomas e gravando no banco. O que muda é quem traduz a string: Google, Worker ou GPT. O TranslatePress não precisa saber da diferença se a linha chega traduzida.

Por que não mandar tudo para o GPT?

Dá. Eu uso GPT no par que o Worker não cobre. No resto, o Worker saía mais barato — na gravação, sem custo visível de CPU. GPT ainda cobra token. Cloudflare, naquele recorte, cobrava a cota gratuita de requisição.

Assistant ainda economiza token hoje?

Na API que eu usei em janeiro de 2024, a instrução do Assistant não pesava igual à do chat. A OpenAI mudou produto depois. Antes de copiar o truque, confira a cobrança atual do modelo que você for chamar. A ideia continua: não pague a mesma instrução em toda string de botão.

E se eu não uso WordPress?

O fluxo não depende do CMS. Depende da string e de um lugar para gravar a volta. JSON, tabela, arquivo. O n8n conecta. O Worker recebe POST. O filtro é o mesmo.

Você vai passar o JSON do n8n?

Na gravação eu deixei o passo a passo completo para os membros do Site Rentável. Aqui está a arquitetura, o motivo do Assistant e o limite do Worker.

O plugin que recebe essa string de volta está em TranslatePress com a API da OpenAI. Se a conta ainda é a do Google Tradutor, o teto antigo está em TranslatePress e os limites da API do Google.