Voltar ao blog

Tradução Django para Desenvolvedores Solo: De Semanas para Minutos

2026-02-11 8 min de leitura
Tradução Django para Desenvolvedores Solo: De Semanas para Minutos

Você construiu um app Django. Ele funciona, os usuários estão se cadastrando, e agora você quer alcançar pessoas que não falam inglês. O problema é óbvio assim que você olha para ele: o framework de internacionalização do Django é excelente para extrair strings traduzíveis, mas não faz absolutamente nada para preencher as traduções. Essa parte é com você.

Se você é um desenvolvedor solo ou uma equipe de duas pessoas, a lacuna entre o makemessages e um app totalmente traduzido pode parecer enorme. Vou apresentar as opções realistas, explicar por que a maioria delas não funciona para equipes pequenas, e mostrar um fluxo de trabalho que transforma a tradução de uma tarefa de várias semanas em um comando de dois minutos.

As Opções Tradicionais (e Por Que Elas Doem)

Opção 1: Copiar e Colar do Google Translate

A primeira tentativa mais comum. Você abre seu arquivo .po, copia cada msgid no Google Translate, cola o resultado como msgstr, e repete. Para cada string. Em cada idioma.

Um app Django típico tem 200-500 strings traduzíveis. Se você está traduzindo para cinco idiomas, são 1.000-2.500 ciclos de copiar e colar. Mesmo que cada um leve apenas 30 segundos, estamos falando de 8 a 20 horas de trabalho entediante. E isso antes de corrigir os erros de formatação, placeholders quebrados e terminologia inconsistente que inevitavelmente aparecem.

Pior ainda, você tem que fazer tudo de novo no próximo sprint quando adicionar novas strings.

Opção 2: Tradutores Profissionais

A tradução profissional geralmente custa de $0,10 a $0,25 por palavra. Um app Django com 500 strings com média de 8 palavras cada totaliza aproximadamente 4.000 palavras. A $0,15/palavra, são $600 por idioma, ou $3.000 para cinco idiomas.

Para uma startup financiada por capital de risco, isso é um erro de arredondamento. Para um desenvolvedor solo que cobra $9/mês por usuário, pode consumir toda a sua receita do trimestre.

Opção 3: Fiverr e Marketplaces de Freelancers

Você pode encontrar tradutores no Fiverr por $20-50 por idioma. Alguns são genuinamente habilidosos. Muitos estão simplesmente colando seu texto no Google Translate e cobrando pelo privilégio. Você acaba com a mesma qualidade da Opção 1, mais uma rodada extra de comunicação e uma semana de espera.

Opção 4: Crowdin, Transifex ou Weblate

Essas plataformas são poderosas, mas são projetadas para projetos com equipes de tradução dedicadas. O overhead de configuração (sincronizar repositórios, configurar memória de tradução, gerenciar acesso de contribuidores) é excessivo quando você é a única pessoa no projeto. Assinaturas mensais começam em $30-150/mês para planos pagos, e mesmo os planos gratuitos exigem que você mantenha mais uma integração de terceiros.

Opção 5: Colar Tudo no ChatGPT

Isso na verdade funciona surpreendentemente bem em termos de qualidade. Você cola o conteúdo do seu arquivo .po no ChatGPT ou Claude, pede traduções e obtém resultados razoáveis. O problema é que não escala. Você precisa extrair manualmente as strings não traduzidas, formatar o prompt, fazer o parse da resposta de volta para o formato .po, e lidar com o processamento em lotes quando exceder os limites de contexto. Funciona uma vez. Não se sustenta como fluxo de trabalho repetível.

A Abordagem de Automação

E se toda a etapa de tradução fosse um único comando? Essa é a ideia por trás do TranslateBot, um comando de gerenciamento Django de código aberto que lê seus arquivos .po, envia as strings não traduzidas para um provedor de IA e escreve as traduções de volta no formato correto.

Veja como configurá-lo.

Passo 1: Instalar o TranslateBot

uv add --dev translatebot-django

Ou com pip:

pip install translatebot-django

Adicione-o aos seus apps instalados:

# settings.py
INSTALLED_APPS = [
    # ...
    'translatebot_django',
]

Passo 2: Configure Seu Provedor de IA

Adicione duas configurações:

# settings.py
import os

TRANSLATEBOT_API_KEY = os.getenv("OPENAI_API_KEY")
TRANSLATEBOT_MODEL = "gpt-4o-mini"

O TranslateBot funciona com OpenAI, Anthropic Claude, Google Gemini e mais de 100 outros modelos através do LiteLLM. Ele também suporta DeepL como backend de tradução dedicado.

Passo 3: Crie um TRANSLATING.md (Opcional mas Recomendado)

Um arquivo TRANSLATING.md na raiz do seu projeto dá à IA contexto sobre sua aplicação. Isso é o que separa a tradução automática genérica de traduções que realmente se encaixam no seu produto:

# Translation Context

## About This Project
A personal finance tracker for freelancers. Users track invoices,
expenses, and tax obligations.

## Tone
- Friendly and informal
- Use "du" in German, "tu" in French
- Keep financial terms precise

## Terminology
- "invoice" = "Rechnung" (German), "facture" (French)
- "dashboard" = keep as English loanword in all languages
- "freelancer" = keep as English loanword in German

Este arquivo é enviado junto com cada solicitação de tradução, para que a IA use consistentemente o tom e a terminologia corretos.

Passo 4: Traduzir

python manage.py makemessages -l de -l fr -l nl -l es -l ja
python manage.py translate
python manage.py compilemessages

Três comandos. Só isso. O TranslateBot encontra todas as strings não traduzidas em todos os seus arquivos .po, traduz em lotes e escreve os resultados de volta. Por padrão, apenas entradas vazias são traduzidas, então executar o comando novamente após adicionar novas strings traduz apenas as novas.

Como Isso Funciona na Prática

Aqui está um fluxo de trabalho de sprint realista para um desenvolvedor solo que suporta cinco idiomas:

Segunda-feira: Você desenvolve uma nova funcionalidade. Adiciona algumas novas strings traduzíveis usando gettext() e {% trans %} durante o desenvolvimento.

from django.utils.translation import gettext_lazy as _

class InvoiceView(View):
    def post(self, request):
        # New string added during development
        messages.success(request, _("Invoice sent successfully."))

Antes de commitar: Você executa três comandos:

python manage.py makemessages -a --no-obsolete
python manage.py translate
python manage.py compilemessages

O comando translate detecta as novas entradas não traduzidas e traduz apenas essas. Se você adicionou 5 novas strings e suporta 5 idiomas, ele faz 25 traduções em uma única chamada de API. Todo o processo leva menos de um minuto.

Você commita seu código, templates e arquivos .po/.mo atualizados juntos. Traduções são parte do seu fluxo de desenvolvimento normal, não um projeto separado.

Pré-visualização Antes de Commitar

Se você quer ver as traduções antes de serem escritas em disco, use o modo dry-run:

python manage.py translate --dry-run

Isso imprime cada tradução no terminal sem modificar nenhum arquivo.

A Comparação de Custos

Aqui é onde a automação se torna difícil de contestar.

Abordagem 500 strings, 5 idiomas Tempo Custo recorrente
Copiar e colar manual Grátis ~40 horas ~8 hrs/sprint
Tradutores profissionais ~$3.000 1-2 semanas ~$600/sprint
Tradutores do Fiverr ~$100-250 3-7 dias ~$50/sprint
Crowdin/Transifex $30-150/mês Config: horas Contínuo
TranslateBot + GPT-4o-mini ~$0,05 ~2 minutos ~$0,01/sprint
TranslateBot + DeepL Free $0 ~2 minutos $0

Um app Django de pequeno a médio porte com cerca de 500 strings traduzíveis geralmente custa menos de $0,01 por idioma com gpt-4o-mini. Para a maioria dos projetos solo, o nível gratuito do DeepL (500.000 caracteres/mês) cobre tudo sem custo algum.

Para ser claro: traduções de IA não são perfeitas. Traduções humanas econômicas também não são. A diferença é que traduções de IA custam quase nada, chegam instantaneamente e podem ser reexecutadas quando você quiser.

Integração com CI: Nunca Envie Strings Não Traduzidas

Um dos padrões mais úteis que encontrei como desenvolvedor solo é adicionar uma verificação de traduções no CI. O TranslateBot inclui um comando check_translations que falha se qualquer arquivo .po tiver entradas não traduzidas ou fuzzy:

# .github/workflows/ci.yml
jobs:
  translations:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v4
        with:
          enable-cache: true
      - run: uv python install
      - run: uv sync --frozen
      - name: Install gettext
        run: sudo apt-get update && sudo apt-get install -y --no-install-recommends gettext
      - name: Check translations
        run: uv run python manage.py check_translations --makemessages

Se você adicionar uma nova tag {% trans %} em um template e esquecer de executar translate, o CI vai detectar:

locale/de/LC_MESSAGES/django.po: 1 untranslated, 0 fuzzy
locale/fr/LC_MESSAGES/django.po: 1 untranslated, 0 fuzzy
CommandError: Translation check failed

Isso transforma traduções de algo que você precisa lembrar de fazer em algo que você não pode esquecer.

Dicas Práticas

Comece com dois ou três idiomas. Você não precisa lançar em 15 idiomas no primeiro dia. Escolha os que têm mais usuários ou o maior mercado endereçável. Alemão, francês e espanhol cobrem bastante terreno nos mercados europeus.

Peça para falantes nativos revisarem strings críticas. Traduções de IA são boas o suficiente para a maioria dos textos de interface, mas o título da sua landing page e o fluxo de onboarding merecem um olhar humano. Peça a um amigo, usuário ou alguém em um fórum da comunidade para dedicar 10 minutos revisando as strings mais visíveis.

Use dry-run antes de sobrescrever. Se você precisar retraduzir tudo (por exemplo, após atualizar seu TRANSLATING.md com melhores diretrizes de terminologia), pré-visualize as mudanças primeiro:

python manage.py translate --overwrite --dry-run

Mantenha o TRANSLATING.md no controle de versão. Ele faz parte da configuração de tradução do seu projeto. Quando você atualizar as diretrizes de terminologia ou tom, a próxima execução do translate refletirá essas mudanças para quaisquer novas strings.

Traduza por app quando necessário. Se você só alterou strings em um app, pode limitar o escopo da tradução:

python manage.py translate --app billing

De Semanas a Minutos

O framework de internacionalização do Django é um dos melhores em qualquer framework web. As ferramentas para makemessages, diretórios de locale e compilemessages são maduras e confiáveis. A única peça que faltava era a etapa de tradução em si. Essa costumava ser a parte cara e lenta.

Com o TranslateBot, o fluxo de trabalho se torna:

  1. Escreva código com gettext() e {% trans %} normalmente
  2. Execute makemessages para extrair strings
  3. Execute translate para preencher as traduções
  4. Execute compilemessages para compilar
  5. Commite tudo junto

Para um desenvolvedor solo, isso significa que localização não é mais um projeto que você planeja para "algum dia". É algo que você pode fazer hoje, no tempo que leva para preparar uma xícara de café.

O TranslateBot é código aberto e está disponível no PyPI e no GitHub. Instale, execute o comando e veja seu app em um novo idioma em minutos.

Pare de editar arquivos .po manualmente

TranslateBot automatiza traduções Django com IA. Um comando, todos os seus idiomas, centavos por tradução.