WordPress multilíngue

Como conectei o TranslatePress à API da OpenAI

Adaptei o motor personalizado do TranslatePress para chamar a API da OpenAI, traduzir uma string por vez e salvar só o texto final. Veja como controlei uso e custo.

Assistir ao vídeo original no YouTube
Thumbnail do vídeo: Translatepress + GPT Open AI + Extension

Eu queria traduzir meus sites pelo TranslatePress gastando menos do que gastaria com a API do Google. Na minha configuração de 2024, cheguei a estimar uma diferença de até cem vezes; isso dependia do volume, dos idiomas, do modelo e das chamadas repetidas. Para chegar lá, adaptei um motor personalizado do TranslatePress para chamar a API da OpenAI, enviar uma string por vez e gravar só o texto traduzido.

Use um motor personalizado para chamar a API certa

Eu pedi ao suporte do TranslatePress um template para adicionar um motor próprio. O arquivo não vinha pronto para falar com a OpenAI: alterei a chamada, adaptei o formato da resposta e conferi o que o plugin esperava receber. Depois, instalei a extensão no WordPress e selecionei o motor personalizado na tela de tradução automática. A chave e o endereço da chamada ficavam na configuração do servidor.

Era a API da OpenAI, não o ChatGPT aberto no navegador; a cobrança também era separada da assinatura do ChatGPT. Usei o GPT-3.5 Turbo e comparei algumas frases curtas com o GPT-4. Naquele momento, achei o primeiro suficiente para botões e menus e mais barato para o meu volume. A diferença de até cem vezes era uma estimativa minha, não um resultado que outra conta ou outro site necessariamente teria.

O caminho exato dependia do template que eu havia recebido e alterado. O TranslatePress hoje também lista seu motor TranslatePress AI e integrações automáticas próprias; não dá para pressupor que uma instalação nova tenha o meu plugin personalizado pronto para selecionar. Se você for usar um motor próprio, primeiro confirme como a versão instalada recebe o endpoint e o formato de retorno.

  1. Crie a chave da API na plataforma da OpenAI; ela é diferente da conta do ChatGPT.
  2. Use uma extensão de motor personalizado compatível com a versão instalada do TranslatePress.
  3. Configure o endpoint e mantenha a chave no servidor, fora do código entregue ao navegador.
  4. Selecione esse motor na tradução automática e teste algumas strings antes de enviar um lote maior.

Uma string por chamada deixou cada tradução identificável

O template original enviava várias strings num array, mas eu não estava recebendo as traduções do lote de forma confiável. Troquei para uma chamada por string. Ficou mais simples relacionar o texto que saiu com a linha certa do TranslatePress e descobrir qual tradução falhou.

Cada chamada também precisava dizer de qual idioma para qual idioma traduzir e quais elementos preservar. Eu via cerca de 50 a 60 tokens só nessa instrução; como muitas strings eram botões ou frases curtas, ela podia custar mais que o próprio texto. Hoje eu manteria a orientação concisa e contabilizaria tudo que vai na entrada, sem assumir que guardar uma instrução num objeto separado faz os tokens deixarem de ser cobrados.

Extraia a tradução antes de gravar a resposta

A API respondia com um objeto maior, mas o TranslatePress precisava receber o texto traduzido. Eu adaptei a extensão para extrair esse campo, em vez de despejar o JSON inteiro no registro. Em muitas chamadas, guardar o pacote bruto deixaria o log crescer bem mais depressa sem ajudar na leitura da tradução.

Na minha extensão, a tabela que eu consultava se chamava `translate_machine_engine`. Ali eu comparava a string original com a resposta. Se a tradução viesse vazia ou igual ao original, eu não marcava aquela linha como concluída. Esse filtro era simples; em outro projeto, uma resposta igual pode ser legítima para nomes de produto ou termos que não se traduzem, então vale separar exceções conhecidas de falhas reais.

Também não deixaria o histórico detalhado ligado sem necessidade. A própria documentação do TranslatePress recomenda registrar consultas principalmente para teste e depuração, porque o log pode afetar o desempenho. Durante a conferência, mantenha o original, o idioma de destino e o resultado juntos; depois de estabilizar o motor, grave apenas o que for útil para operar.

  1. Leia do retorno da API somente o campo que contém a tradução.
  2. Relacione a resposta à string original e ao idioma de destino.
  3. Deixe falhas vazias ou suspeitas pendentes, sem marcar a linha como traduzida.
  4. Use o log detalhado para depuração e desligue-o quando não estiver investigando um problema.

Novos idiomas aumentavam a conta e o número de chamadas

Um dos meus sites tinha mais de 30 mil páginas em 12 idiomas. Naquele período, eu costumava gastar perto de US$ 2 por dia; quando acrescentei vários idiomas de uma vez, cheguei a dias de quase US$ 10. Em outro site, limitei o TranslatePress a 200 mil caracteres por dia e encontrei um consumo de cerca de 32.900. São números de projetos meus, não uma previsão para outro site: a conta muda com o tamanho das strings, as línguas e o modelo.

A primeira economia era não traduzir a mesma string sem necessidade. O TranslatePress guarda traduções no banco e oferece opções para bloquear crawlers e limitar quantos caracteres podem ser enviados por dia. Eu usava o bloqueio de robôs do Google porque uma visita automática não precisava disparar uma chamada paga. Para uma integração que você acabou de instalar, também dá para ativar o log temporariamente e conferir o que está sendo cobrado.

A API da OpenAI tem um painel de uso por projeto, alertas de gasto e limite rígido mensal. O alerta só avisa; o limite rígido pode interromper as traduções quando é atingido, e o registro do gasto não para exatamente no centavo configurado. Eu criaria uma chave de API para um projeto específico, observaria o custo dos primeiros lotes e escolheria conscientemente se quero um aviso ou uma interrupção.

  1. Crie a chave no projeto que vai pagar pelas traduções e confira se ela está guardada no servidor.
  2. Bloqueie crawlers na tradução automática se as visitas deles não devem gerar chamadas.
  3. Defina um teto diário de caracteres no TranslatePress e observe o consumo inicial.
  4. Configure um alerta de gasto; se precisar parar a API acima de um valor, habilite o limite rígido e aceite que ele pode interromper traduções.

A economia que eu esperava com Assistants não faz parte do fluxo atual

Eu queria experimentar os Assistants para guardar as instruções por idioma e não reenviar 50 ou 60 tokens em cada string. Essa parte ainda era uma ideia; eu não tinha terminado a integração. A Assistants API foi encerrada em 26 de agosto de 2026. Hoje, uma integração nova precisa usar uma API disponível, e o reaproveitamento de instruções não elimina por si só a cobrança: cache de entrada só reduz o preço quando a chamada realmente reaproveita um prefixo elegível.

O TranslatePress também passou a oferecer o TranslatePress AI como motor integrado. Então não é necessário reconstruir minha extensão antiga apenas para traduzir com IA. Eu escolheria um motor próprio quando precisasse controlar endpoint, modelo ou forma de registrar os resultados; para usar uma opção pronta, compararia as cotas e os custos atuais do TranslatePress com os de uma chamada direta à API.

Para dividir as strings entre serviços por idioma, veja como montei uma fila de tradução com n8n e Cloudflare. Se o banco acumular textos antigos, expliquei como procurar strings sem uso no TranslatePress.