Torna al blog

Traduzione Django per Sviluppatori Solitari: Da Settimane a Minuti

2026-02-11 8 min di lettura
Traduzione Django per Sviluppatori Solitari: Da Settimane a Minuti

Hai costruito un'app Django. Funziona, gli utenti si registrano, e ora vuoi raggiungere persone che non parlano inglese. Il problema e' evidente appena lo guardi: il framework di internazionalizzazione di Django e' eccellente nell'estrarre le stringhe traducibili, ma non fa assolutamente nulla per inserire le traduzioni. Quella parte tocca a te.

Se sei uno sviluppatore singolo o un team di due persone, il divario tra makemessages e un'app completamente tradotta puo' sembrare enorme. Passero' in rassegna le opzioni realistiche, spieghero' perche' la maggior parte non funziona per team piccoli, e mostrero' un flusso di lavoro che trasforma la traduzione da un lavoro di settimane in un comando di due minuti.

Le Opzioni Tradizionali (e Perche' Fanno Male)

Opzione 1: Copia-Incolla da Google Translate

Il primo tentativo piu' comune. Apri il tuo file .po, copi ogni msgid in Google Translate, incolli il risultato come msgstr, e ripeti. Per ogni stringa. In ogni lingua.

Un'app Django tipica ha 200-500 stringhe traducibili. Se stai traducendo in cinque lingue, sono 1.000-2.500 cicli di copia-incolla. Anche se ognuno richiede solo 30 secondi, stai guardando 8-20 ore di lavoro noioso. E questo prima di correggere errori di formattazione, placeholder rotti e terminologia incoerente che inevitabilmente si insinuano.

Peggio ancora, devi rifarlo nel prossimo sprint quando aggiungi nuove stringhe.

Opzione 2: Traduttori Professionisti

La traduzione professionale costa tipicamente da $0,10 a $0,25 per parola. Un'app Django con 500 stringhe con una media di 8 parole ciascuna equivale a circa 4.000 parole. A $0,15/parola, sono $600 per lingua, o $3.000 per cinque lingue.

Per una startup finanziata da venture capital, e' un errore di arrotondamento. Per uno sviluppatore singolo che fa pagare $9/mese per utente, puo' mangiarsi l'intero fatturato del trimestre.

Opzione 3: Fiverr e Marketplace di Freelance

Puoi trovare traduttori su Fiverr per $20-50 per lingua. Alcuni sono genuinamente abili. Molti stanno semplicemente incollando il tuo testo in Google Translate e facendoti pagare per il privilegio. Finisci con la stessa qualita' dell'Opzione 1, piu' un giro extra di comunicazione e una settimana di attesa.

Opzione 4: Crowdin, Transifex o Weblate

Queste piattaforme sono potenti, ma sono progettate per progetti con team di traduzione dedicati. L'overhead di configurazione (sincronizzare repository, configurare la memoria di traduzione, gestire gli accessi dei contributori) e' eccessivo quando sei l'unica persona nel progetto. Gli abbonamenti mensili partono da $30-150/mese per i piani a pagamento, e anche i piani gratuiti richiedono di mantenere un'altra integrazione di terze parti.

Opzione 5: Incollare Tutto in ChatGPT

Questo in realta' funziona sorprendentemente bene per la qualita'. Incolli il contenuto del tuo file .po in ChatGPT o Claude, chiedi le traduzioni e ottieni risultati ragionevoli. Il problema e' che non scala. Devi estrarre manualmente le stringhe non tradotte, formattare il prompt, analizzare la risposta nel formato .po, e gestire il batching quando superi i limiti di contesto. Funziona una volta. Si rompe come flusso di lavoro ripetibile.

L'Approccio dell'Automazione

E se l'intero passaggio di traduzione fosse un singolo comando? Questa e' l'idea dietro TranslateBot, un comando di gestione Django open source che legge i tuoi file .po, invia le stringhe non tradotte a un provider AI, e scrive le traduzioni nel formato corretto.

Ecco come configurarlo.

Passo 1: Installare TranslateBot

uv add --dev translatebot-django

Oppure con pip:

pip install translatebot-django

Aggiungilo alle tue app installate:

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

Passo 2: Configura il Tuo Provider AI

Aggiungi due impostazioni:

# settings.py
import os

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

TranslateBot funziona con OpenAI, Anthropic Claude, Google Gemini e oltre 100 altri modelli tramite LiteLLM. Supporta anche DeepL come backend di traduzione dedicato.

Passo 3: Crea un TRANSLATING.md (Opzionale ma Consigliato)

Un file TRANSLATING.md nella root del tuo progetto fornisce all'AI il contesto sulla tua applicazione. Questo e' cio' che separa la traduzione automatica generica dalle traduzioni che si adattano veramente al tuo prodotto:

# 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

Questo file viene inviato con ogni richiesta di traduzione, cosi' l'AI usa coerentemente il tono e la terminologia corretti.

Passo 4: Traduci

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

Tre comandi. Tutto qui. TranslateBot trova tutte le stringhe non tradotte in tutti i tuoi file .po, le traduce in batch, e scrive i risultati. Per impostazione predefinita vengono tradotte solo le voci vuote, quindi eseguire il comando di nuovo dopo aver aggiunto nuove stringhe traduce solo quelle nuove.

Come Appare nella Pratica

Ecco un flusso di lavoro sprint realistico per uno sviluppatore singolo che supporta cinque lingue:

Lunedi': Costruisci una nuova funzionalita'. Aggiungi alcune nuove stringhe traducibili usando gettext() e {% trans %} durante lo sviluppo.

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."))

Prima del commit: Esegui tre comandi:

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

Il comando translate rileva le nuove voci non tradotte e traduce solo quelle. Se hai aggiunto 5 nuove stringhe e supporti 5 lingue, esegue 25 traduzioni in una singola chiamata API. L'intero processo richiede meno di un minuto.

Fai il commit del tuo codice, template e file .po/.mo aggiornati insieme. Le traduzioni sono parte del tuo normale flusso di sviluppo, non un progetto separato.

Anteprima Prima del Commit

Se vuoi vedere le traduzioni prima che vengano scritte su disco, usa la modalita' dry-run:

python manage.py translate --dry-run

Questo stampa ogni traduzione nel terminale senza modificare alcun file.

Il Confronto dei Costi

Ecco dove l'automazione diventa difficile da contestare.

Approccio 500 stringhe, 5 lingue Tempo Costo ricorrente
Copia-incolla manuale Gratuito ~40 ore ~8 ore/sprint
Traduttori professionisti ~$3.000 1-2 settimane ~$600/sprint
Traduttori Fiverr ~$100-250 3-7 giorni ~$50/sprint
Crowdin/Transifex $30-150/mese Setup: ore Continuo
TranslateBot + GPT-4o-mini ~$0,05 ~2 minuti ~$0,01/sprint
TranslateBot + DeepL Free $0 ~2 minuti $0

Un'app Django di dimensioni piccole-medie con circa 500 stringhe traducibili costa tipicamente meno di $0,01 per lingua con gpt-4o-mini. Per la maggior parte dei progetti individuali, il piano gratuito di DeepL (500.000 caratteri/mese) copre tutto a costo zero.

Per essere chiari: le traduzioni AI non sono perfette. Neanche le traduzioni umane economiche lo sono. La differenza e' che le traduzioni AI non costano quasi nulla, arrivano istantaneamente e possono essere rieseguite quando vuoi.

Integrazione CI: Non Spedire Mai Stringhe Non Tradotte

Uno dei pattern piu' utili che ho trovato come sviluppatore singolo e' aggiungere un controllo delle traduzioni al CI. TranslateBot include un comando check_translations che fallisce se qualsiasi file .po ha voci non tradotte o 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 aggiungi un nuovo tag {% trans %} in un template e dimentichi di eseguire translate, il CI lo catturera':

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

Questo trasforma le traduzioni da qualcosa che devi ricordarti di fare a qualcosa che non puoi dimenticare.

Consigli Pratici

Inizia con due o tre lingue. Non devi lanciare in 15 lingue il primo giorno. Scegli quelle dove hai piu' utenti o il mercato piu' grande. Tedesco, francese e spagnolo coprono molto terreno per i mercati europei.

Fai revisionare le stringhe critiche da madrelingua. Le traduzioni AI sono abbastanza buone per la maggior parte dei testi UI, ma il titolo della tua landing page e il flusso di onboarding meritano un occhio umano. Chiedi a un amico, un utente o qualcuno in un forum della community di dedicare 10 minuti alla revisione delle stringhe piu' visibili.

Usa dry-run prima di sovrascrivere. Se hai bisogno di ritradurre tutto (ad esempio, dopo aver aggiornato il tuo TRANSLATING.md con linee guida terminologiche migliori), visualizza prima le modifiche:

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

Mantieni TRANSLATING.md nel controllo di versione. Fa parte della configurazione di traduzione del tuo progetto. Quando aggiorni le linee guida di terminologia o tono, la prossima esecuzione di translate riflettera' quei cambiamenti per qualsiasi nuova stringa.

Traduci per app quando necessario. Se hai modificato stringhe in una sola app, puoi limitare l'ambito della traduzione:

python manage.py translate --app billing

Da Settimane a Minuti

Il framework di internazionalizzazione di Django e' uno dei migliori in qualsiasi framework web. Gli strumenti per makemessages, le directory locale e compilemessages sono maturi e affidabili. L'unico pezzo mancante era il passaggio di traduzione stesso. Quello era la parte costosa e lenta.

Con TranslateBot, il flusso di lavoro diventa:

  1. Scrivi codice con gettext() e {% trans %} come al solito
  2. Esegui makemessages per estrarre le stringhe
  3. Esegui translate per inserire le traduzioni
  4. Esegui compilemessages per compilare
  5. Fai il commit di tutto insieme

Per uno sviluppatore singolo, questo significa che la localizzazione non e' piu' un progetto che pianifichi per "un giorno". E' qualcosa che puoi fare oggi, nel tempo che ci vuole per preparare una tazza di caffe'.

TranslateBot e' open source e disponibile su PyPI e GitHub. Installalo, esegui il comando e vedi la tua app in una nuova lingua in pochi minuti.

Smetti di modificare i file .po manualmente

TranslateBot automatizza le traduzioni Django con l'AI. Un comando, tutte le tue lingue, pochi centesimi per traduzione.