Intermedio 11 minTraduzione

Tradurre documenti in locale: l'alternativa a DeepL

Incollare un contratto, un rapporto finanziario o un fascicolo delle risorse umane in DeepL o ChatGPT significa inviare quel documento a server che non controlli. La traduzione con IA locale risolve questo problema: un LLM multilingue viene eseguito sulla tua macchina e nessun dato esce. Questa guida mostra quali modelli scegliere, come preservare la formattazione dei file e come tradurre decine di documenti in batch con un semplice script Ollama.

Di Marie L.·Agg. 2026-08-27·Testato su Windows, macOS e Linux

#Perché non inviare i tuoi documenti a DeepL

DeepL e Google Translate sono eccellenti, ma il loro modello economico si basa sul cloud: il tuo testo passa attraverso i loro server e, a seconda dell'offerta, può essere conservato o utilizzato per migliorare i modelli. Per un'email banale, non importa. Per un contratto sotto NDA, un brevetto in fase di deposito, un bilancio contabile o dati personali dei dipendenti, è un rischio giuridico e concorrenziale concreto.

La traduzione con un'IA locale cambia le carte in tavola: il modello viene scaricato sul tuo disco ed eseguito sulla tua CPU o GPU. Nessuna richiesta di rete, nessun account, nessun limite di volume. Puoi tradurre un'intera cartella di documenti riservati senza che un solo byte lasci il tuo computer — anche offline, in aereo o su una rete isolata.

i
Il vero argomento: la conformità
Per uno studio legale, un servizio HR o un'équipe sanitaria, la traduzione locale elimina ogni questione relativa al GDPR sul trasferimento dei dati a un responsabile del trattamento. Il documento non esce mai dal perimetro dell'azienda.
Privacy
Contratti, brevetti, dati medici o relativi alle risorse umane rimangono sulla tua macchina.
Nessun costo di utilizzo
Nessun abbonamento né fatturazione per carattere: traduci 10 o 10.000 pagine allo stesso prezzo.
Offline
Funziona senza connessione, utile su computer isolato o in viaggio.
Volume illimitato
Nessun limite mensile né throttling come sulle API cloud.

#Quali modelli locali traducono veramente bene

Il kit RAG Locale

I tuoi documenti, la tua IA: un RAG locale affidabile sui tuoi PDF, sulle tue note e sulle tue email — senza inviare nulla nel cloud.

  • Spazio online a vita
  • PDF + file
  • Aggiornamenti a vita

Non tutti i LLM sono equivalenti nella traduzione. Un buon traduttore locale deve essere stato addestrato su un ampio corpus multilingue e saper gestire le sfumature del francese. Nel 2026, alcune famiglie si distinguono nettamente per un utilizzo auto-ospitato.

Qwen 3.5 9B
Eccellente nelle attività multilingue, molto buono in francese, gestisce bene le sfumature e il vocabolario tecnico. ≈6,6 GB in Q4, 256k di contesto, licenza Apache 2.0: il miglior compromesso tra qualità e risorse nel 2026. Passa a Qwen 3.8 27B (≈18 GB) se la qualità non è sufficiente.
Gemma 4 12B
Traduzioni fluide e naturali, punteggiatura francese curata. Multimodale, ora sotto licenza Apache 2.0 (Gemma è passato ad Apache 2.0 nel 2026). ≈7,6 GB in Q4, funziona bene su una GPU da 12-16 GB o su un Mac con memoria unificata.
Qwen 3.5 4B
Il piccolo modello multilingue di riferimento nel 2026: solo ≈3,4 GB, funziona ovunque — anche su CPU — e traduce già molto bene per le sue dimensioni. Apache 2.0.
Mistral Small 24B
Eccellente in francese, veloce, ≈14 GB in Q4. Un solido modello generalista, un'ottima scelta per elaborare grandi volumi su una GPU da 16 GB.
Qwen 3.6 35B-A3B
Qualità simile a quella del cloud grazie alla sua architettura MoE, ora accessibile già con 32 GB (≈23 GB in Q4, RTX 4090 o Mac con un'ampia memoria unificata). Riservato alle traduzioni impegnative.
→
Da dove iniziare
Se hai dubbi, avvia Qwen 3.5 9B in Q4_K_M. Offre il miglior rapporto qualità/VRAM per la traduzione FR ↔ EN/ES/DE/IT su una GPU da 8 a 12 GB. Passa a Qwen 3.8 27B solo se la qualità non ti soddisfa.

Esistono anche modelli specializzati nella traduzione, come NLLB o Opus-MT, che sono molto leggeri, ma un LLM generalista recente li supera spesso sui testi lunghi e nel rispetto del contesto (registro, terminologia professionale, coerenza di un intero documento).


#Prerequisiti e installazione

La base è classica: Ollama come motore di inferenza, un modello multilingue e Python per gli script di elaborazione dei file. Ollama è in ascolto per impostazione predefinita su http://localhost:11434.

Ollama installato
Il daemon che scarica ed esegue i modelli. Consultare la guida all'installazione se non è già stato installato.
Una GPU con un buon margine
Una RTX 3060 da 12 GB gestisce senza problemi un Qwen 3.5 9B in Q4 (~6,6 GB). Funziona anche su CPU, ma più lentamente.
Python 3.10+
Per gestire DOCX, PDF e Markdown e chiamare l'API Ollama.
Terminale
# Récupérer un modèle multilingue adapté à la traduction
ollama pull qwen3.5:9b

# Vérifier qu'il répond
ollama run qwen3.5:9b "Traduis en anglais : Le contrat prend effet à sa signature."
Terminale
# Dépendances Python pour les formats de documents
pip install ollama python-docx pypdf markdown-it-py

#Primo test di traduzione

Prima di automatizzare, verifica la qualità su un estratto rappresentativo. La chiave di una buona traduzione locale sta nel prompt di sistema: definisce il ruolo, la lingua di destinazione e soprattutto l'istruzione di non aggiungere nulla.

traduire.py
import ollama

MODELE = "qwen3.5:9b"

SYSTEME = (
    "Tu es un traducteur professionnel. Traduis le texte fourni de "
    "{source} vers {cible}. Conserve le sens, le registre et la "
    "terminologie technique. Ne commente pas, n'ajoute rien : "
    "renvoie uniquement la traduction."
)

def traduire(texte, source="français", cible="anglais"):
    reponse = ollama.chat(
        model=MODELE,
        messages=[
            {"role": "system", "content": SYSTEME.format(source=source, cible=cible)},
            {"role": "user", "content": texte},
        ],
        options={"temperature": 0.2},
    )
    return reponse["message"]["content"].strip()

if __name__ == "__main__":
    extrait = "Le présent contrat prend effet à la date de sa signature par les deux parties."
    print(traduire(extrait))
→
Temperatura bassa
Nella traduzione, una temperatura compresa tra 0,1 e 0,3 dà risultati più fedeli e riproducibili. Un valore elevato spinge il modello a «ricamare» e a riformulare, cosa non desiderabile.

#Preservare la formattazione (DOCX, PDF, Markdown)

Tradurre testo grezzo è facile; mantenere la formattazione di un documento reale è più difficile. L'approccio giusto non consiste nell'inviare l'intero file al modello, ma nel tradurre ogni segmento di testo al suo posto, mantenendo intatta la struttura.

#File Word (DOCX)

python-docx rende accessibili ogni paragrafo e ogni cella di tabella. Si traduce il testo di ogni « run » mantenendo lo stile, poi si riscrive il file. L'impaginazione, i titoli e le tabelle vengono preservati.

traduire_docx.py
from docx import Document
from traduire import traduire

def traduire_docx(entree, sortie, cible="anglais"):
    doc = Document(entree)

    for para in doc.paragraphs:
        if para.text.strip():
            para.text = traduire(para.text, cible=cible)

    for table in doc.tables:
        for ligne in table.rows:
            for cellule in ligne.cells:
                if cellule.text.strip():
                    cellule.text = traduire(cellule.text, cible=cible)

    doc.save(sortie)
    print(f"Traduit : {sortie}")

if __name__ == "__main__":
    traduire_docx("contrat.docx", "contrat_en.docx")
!
La formattazione può andare persa nei paragrafi con più run
Riscrivere para.text sostituisce i run e può eliminare dettagli della formattazione (grassetto nel mezzo di una frase). Per un risultato impeccabile su documenti con una formattazione elaborata, traduci un run alla volta anziché l'intero paragrafo — a costo di una suddivisione meno naturale per il modello.

#Markdown

Il Markdown è il formato più semplice da tradurre correttamente: basta indicare al modello di preservare la sintassi. I titoli, le liste, i link e i blocchi di codice restano inalterati se il prompt lo richiede.

traduire_md.py
import ollama

SYSTEME_MD = (
    "Traduis ce document Markdown en {cible}. Conserve EXACTEMENT la "
    "syntaxe Markdown : titres (#), listes, liens, tableaux et blocs "
    "de code. Ne traduis PAS le contenu des blocs de code. Renvoie "
    "uniquement le Markdown traduit."
)

def traduire_markdown(chemin, sortie, cible="anglais"):
    texte = open(chemin, encoding="utf-8").read()
    reponse = ollama.chat(
        model="qwen3.5:9b",
        messages=[
            {"role": "system", "content": SYSTEME_MD.format(cible=cible)},
            {"role": "user", "content": texte},
        ],
        options={"temperature": 0.2},
    )
    open(sortie, "w", encoding="utf-8").write(reponse["message"]["content"])

traduire_markdown("README.md", "README_en.md")

#PDF

Il PDF è il caso più delicato: è un formato di presentazione, non di contenuto. Si estrae il testo con pypdf, lo si traduce, poi lo si inserisce in un nuovo documento (spesso un DOCX o un PDF generato). Riprodurre l'impaginazione esatta di un PDF è raramente conveniente; punta a un documento leggibile piuttosto che a una copia pixel-perfect.

traduire_pdf.py
from pypdf import PdfReader
from docx import Document
from traduire import traduire

def pdf_vers_docx_traduit(entree, sortie, cible="anglais"):
    lecteur = PdfReader(entree)
    doc = Document()

    for page in lecteur.pages:
        texte = page.extract_text() or ""
        for paragraphe in texte.split("\n\n"):
            if paragraphe.strip():
                doc.add_paragraph(traduire(paragraphe, cible=cible))

    doc.save(sortie)

pdf_vers_docx_traduit("rapport.pdf", "rapport_en.docx")

#Traduzione in batch con Ollama

Il principale vantaggio dell'esecuzione locale è poter elaborare grandi volumi senza una fattura da pagare. Uno script che scorre una cartella e traduce ogni file trasforma il tuo computer in un servizio di traduzione in batch. Ecco uno script che elabora tutti i file .docx di una cartella.

batch_traduction.py
import sys
from pathlib import Path
from traduire_docx import traduire_docx

def traduire_dossier(dossier, cible="anglais", suffixe="_traduit"):
    dossier = Path(dossier)
    fichiers = list(dossier.glob("*.docx"))
    print(f"{len(fichiers)} fichier(s) à traduire\n")

    for i, fichier in enumerate(fichiers, 1):
        if suffixe in fichier.stem:
            continue  # éviter de retraduire une sortie
        sortie = fichier.with_name(f"{fichier.stem}{suffixe}.docx")
        print(f"[{i}/{len(fichiers)}] {fichier.name}")
        traduire_docx(fichier, sortie, cible=cible)

    print("\nTerminé.")

if __name__ == "__main__":
    dossier = sys.argv[1] if len(sys.argv) > 1 else "."
    traduire_dossier(dossier)
Terminale
# Traduire tous les .docx d'un dossier en anglais
python batch_traduction.py ./documents_a_traduire
→
Mantenere il modello caricato
Per un lotto di grandi dimensioni, imposta OLLAMA_KEEP_ALIVE (ad esempio export OLLAMA_KEEP_ALIVE=30m) per evitare che Ollama rimuova il modello dalla memoria tra un file e l'altro. Il ricaricamento in VRAM richiede diversi secondi ogni volta.

#Migliora la qualità delle traduzioni

Un LLM locale traduce bene di default, ma alcune impostazioni portano il risultato da «corretto» a «pubblicabile», soprattutto su testi professionali.

  1. 01
    Fornire un glossario
    Aggiungi al prompt di sistema un glossario dei termini del tuo settore e della loro traduzione obbligatoria (ragione sociale, nomi di prodotti, acronimi). Il modello rispetterà la tua terminologia invece di inventarne una.
  2. 02
    Dividere intelligentemente
    Traduci per paragrafo o per sezione, non frase per frase: il modello ha bisogno di contesto per gestire bene le concordanze, i riferimenti pronominali e il registro.
  3. 03
    Fornire il contesto del documento
    Specifica la natura del testo («contratto commerciale», «istruzioni tecniche», «email interna») nel prompt. Il registro e il lessico si adattano di conseguenza.
  4. 04
    Rileggere i passaggi critici
    Per un contratto o un documento legale, una revisione umana delle clausole sensibili rimane indispensabile — l'esecuzione locale ti offre riservatezza, non infallibilità.
  5. 05
    Passare a un modello più grande se necessario
    Se la qualità non migliora più, passa da Qwen 3.5 9B a Qwen 3.8 27B (ricorda di impostare il suo ragionamento su «low»: per impostazione predefinita ragiona troppo, cosa inutile nella traduzione), o persino a un MoE come Qwen 3.6 35B-A3B. Il miglioramento è netto sulle frasi lunghe e sulle sfumature terminologiche.

#Risoluzione dei problemi

Il modello aggiunge commenti
Rafforza l'istruzione « restituisci UNICAMENTE la traduzione » e abbassa la temperatura. Alcuni modelli antepongono « Ecco la traduzione: »: rimuovi questo prefisso in fase di post-elaborazione, se necessario.
Traduce nella lingua sbagliata
Indica esplicitamente la lingua di destinazione nel prompt e fornisci un esempio. Su un testo breve, un modello può sbagliare lingua.
La formattazione DOCX viene persa
È la sostituzione di para.text che appiattisce i run. Traduci un run alla volta per i documenti con una formattazione complessa.
Traduzione lenta con grandi volumi di testo
Verifica che il modello rientri nella capacità della VRAM (altrimenti offload su CPU = lentezza). Riduci le dimensioni del modello o usa OLLAMA_KEEP_ALIVE.
Blocchi di codice Markdown tradotti
Insisti nel prompt: « non tradurre il contenuto dei blocchi di codice ». Altrimenti, estraili prima della traduzione e reinseriscili dopo.
Contesto troppo lungo troncato
Un documento molto grande supera la finestra di contesto. Dividilo in sezioni e traduci ciascuna separatamente.

#Per approfondire

La traduzione con IA locale si basa su una configurazione di Ollama ben scelta. Queste guide del sito completano la configurazione:

Installare Ollama
Per installare il motore di inferenza, se non è già stato fatto.
Q4, Q5, Q8: quale quantizzazione scegliere
Per bilanciare qualità della traduzione, velocità e VRAM in base alla tua GPU.
n8n + Ollama : automatizzare con IA locale
Per inserire la traduzione in un workflow senza codice (email in arrivo, file caricati, ecc.).
Questa guida ti è stata utile?

Un feedback, un errore, una precisazione? Facci sapere, così la guida migliora per tutti.