Tradurre un sito web in dieci, venti o quaranta lingue è rapido con una singola IA. Più difficile è la domanda se ci si possa fidare del risultato. Un singolo modello linguistico ogni tanto inventa parole, traduce i nomi dei prodotti o altera un numero, e non se ne accorge da sé. Per questo abbiamo scritto per Odoo 19 un modulo in cui più IA e servizi di traduzione lavorano sullo stesso testo, si valutano a vicenda i risultati in modo anonimo e si accordano sulla formulazione che suona al tempo stesso accurata e naturale. Ciò che non è univoco viene sottoposto alla decisione di una persona.
Il modulo si chiama ai_translation_consensus ed è disponibile su GitHub come software libero con licenza AGPL-3:
github.com/Alex0176/odoo-ai-translation-consensus
Contenuto di questo articolo
- L’idea: controllo incrociato invece di fiducia
- Come nasce una proposta
- Fornitori: con e senza chiave
- Un intero sito web in una volta
- Dashboard, costi e avvio automatico
- Approvazione da parte di persone
- Sicurezza e protezione dei dati
- Installazione
- limiti
- Domande frequenti
- Supporto da parte di Biricon IT Services
L’idea: controllo incrociato invece di fiducia
Il modulo sa fare due cose:
- Tradurre: completare le traduzioni mancanti (o obsolete) di ogni campo traducibile in Odoo, cioè articoli del blog, pagine web, menu, prodotti e tutto il resto che Odoo memorizza in più lingue. Le IA non vedono solo la singola frase, ma i blocchi vicini e un estratto dell’intera pagina. In questo modo le singole parole vengono comprese nel contesto giusto.
- Correggere le bozze: controllare il testo nella sua lingua e proporre formulazioni migliori o correzioni. L’originale è sempre uno dei candidati. Se vince l’originale, non viene modificato nulla.
Il cuore è la verifica reciproca. Ogni IA è brava a giudicare testi altrui, anche se a volte sbaglia essa stessa. Il modulo sfrutta questo aspetto: più fornitori scrivono una versione ciascuno e poi gli stessi fornitori valutano tutte le versioni senza sapere da chi provengano. Un fornitore non valuta la propria versione.
Come nasce una proposta
- Tradurre. Ogni traduttore scrive in parallelo una versione.
- Controlli fissi. Senza IA si verifica se tag HTML, entità, segnaposto come
%so{}, numeri e link sono rimasti invariati. Una versione che viola queste regole non può mai vincere, per quanto suoni fluida. - Valutare. Le restanti versioni vengono mescolate e rese anonime. Ogni revisore assegna a ciascuna un voto per accuratezza e uno per naturalezza (da 1 a 10), indica un favorito e può proporre un miglioramento.
- Accordarsi. Il punteggio di una versione è 0,5 × voto medio + 5 × quota dei voti favoriti. Si considera raggiunto l’accordo se la versione migliore ha almeno il 60 % dei voti favoriti e un voto medio di almeno 7,0.
- Secondo turno. Senza accordo, le versioni migliori, insieme alle proposte di miglioramento dei revisori, vengono sottoposte ancora una volta a valutazione.
- Persona. Se anche allora non è univoco, la proposta attende una decisione.
Se ci sono solo servizi di traduzione puri senza funzione di verifica (ad esempio DeepL), un risultato vale come concordato solo se almeno due servizi hanno fornito esattamente lo stesso testo. Nella correzione di bozze i risultati devono restare riconoscibilmente simili all’originale (somiglianza almeno 0,6, stessi numeri). I piccoli modelli gratuiti rispondono a volte a un lotto con testi spostati o estranei. Tali risposte vengono scartate invece di essere votate. Un glossario fissa nomi di marchi e termini stabili.
Fornitori: con e senza chiave
Servizi gratuiti e a pagamento possono partecipare alla stessa votazione. Il modulo include impostazioni predefinite per molti fornitori; dopo l’installazione sono tutti disattivati.
| Tipo | Traduce | Verifica / corregge | Esempi |
|---|---|---|---|
| Interfaccia compatibile con OpenAI | sì | sì | OpenAI, Mistral, DeepSeek, xAI, Groq, Together, OpenRouter, Cerebras, Qwen, Moonshot, GitHub Models, Hugging Face, Ollama, LM Studio, vLLM, llama.cpp |
| Compatibile con OpenAI senza chiave | sì | sì | Ollama sul proprio server, Pollinations |
| Anthropic | sì | sì | Claude |
| Google Gemini, Cohere | sì | sì | |
| Comando locale | sì | sì | claude -p o qualsiasi programma che legga da stdin e restituisca la risposta |
| Servizi di traduzione | sì | no | DeepL, Google Translate, Azure Translator, LibreTranslate, MyMemory, Lingva |
Si inserisce la chiave (o il nome di una variabile d’ambiente che la contiene), si preme Verifica connessione e si attiva il fornitore. I nomi dei modelli nelle impostazioni predefinite sono punti di partenza; chi li utilizza dovrebbe confrontarli con l’elenco aggiornato del fornitore. Con due o più fornitori c’è un vero controllo incrociato, con uno solo nessuno controlla il suo lavoro. La procedura guidata lo segnala.
Un intero sito web in una volta
Una procedura guidata iniziale (menu Traduzione IA → Inizia qui) spiega i passaggi e crea la prima regola. Se il modulo website è installato, arriva automaticamente anche il modulo ponte ai_translation_consensus_website. Aggiunge l’ambito “Un intero sito web con tutto ciò che contiene”: si sceglie il sito web e ci si fa proporre i contenuti. Il modulo esamina tutti i modelli con campi traducibili che appartengono al sito web (pagine, menu, blog, prodotti, eventi, forum, corsi e altro) e propone una regola per tipo di contenuto, con le lingue del sito web come destinazione.
- Ciò che non è installato (forum, corsi, gallerie) non compare e verrà incluso in seguito, non appena installato.
- I modelli dello shop vengono proposti solo se il sito web ha uno shop. Vengono rilevati solo i record pubblicati.
- Contatti, aziende, fornitori di pagamento, listini, modalità di consegna, programmi fedeltà e filtri snippet non vengono volutamente offerti dal modulo.
- I nomi di indirizzo delle pagine (
seo_name) non vengono tradotti. - I tipi non desiderati possono essere rimossi prima della creazione.
La creazione e la ricerca non costano nulla: la regola elenca soltanto quali testi richiedono lavoro. Solo durante l’elaborazione vengono richiamati i fornitori e sorgono costi.
Dashboard, costi e avvio automatico
La dashboard mostra per ogni regola quanti testi sono pronti, in attesa di una conferma o di una persona, in coda o falliti. A ciò si aggiungono la suddivisione per lingua e fornitore, i costi finora sostenuti e quelli ancora previsti, il tempo residuo stimato e l’interruttore per l’elaborazione pianificata.
I numeri in questa figura sono dati di esempio e non dicono nulla sui costi reali.
- I costi vengono calcolati in base a ciò che i fornitori comunicano effettivamente: token (OpenAI, Anthropic, Gemini, Cohere) o caratteri (DeepL, Google, Azure). I token vengono sempre mostrati, il denaro solo se Lei ha inserito il prezzo per milione di token (o di caratteri) presso il fornitore. Le impostazioni predefinite non contengono prezzi, perché questi cambiano. I servizi che non comunicano i token vengono stimati in base alla lunghezza del testo e contrassegnati come stima.
- Previsione: costi medi e tempo di lavoro per testo moltiplicati per il numero di testi in coda. È una stima che migliora con i primi lotti.
- Avvio automatico: le regole con l’opzione Avvia automaticamente quando un record cambia cercano a ogni esecuzione dell’azione pianificata solo i record modificati dall’ultima ricerca. Con l’azione pianificata attivata, un sito web modificato viene quindi tradotto di nuovo senza alcun intervento.
- Notifica di completamento: quando l'ultimo testo aperto di una regola è stato elaborato, nel canale AI Translation compare una sola volta il messaggio «Tutte le lingue tradotte» (nella revisione: «Tutti i testi verificati»).
Approvazione da parte di persone
Per impostazione predefinita il modulo non scrive nulla nei vostri record senza il vostro consenso. Ogni proposta mostra le versioni, chi le ha scritte, i voti e le osservazioni dei revisori. Potete accettare la proposta, scegliere un'altra versione, digitare una formulazione propria oppure rifiutarla.
Il testo e i nomi dei fornitori in questa immagine sono interamente inventati, solo per mostrare la schermata.
Chi si fida di una regola può attivare Accetta automaticamente in caso di accordo. Le proposte senza accordo restano comunque in attesa di una persona. Al momento dell'accettazione il modulo verifica ancora una volta se nel frattempo il testo di origine è cambiato, ripete i controlli del markup e scrive senza tracciamento e senza notificare i follower.
Sicurezza e protezione dei dati
- Dopo l'installazione tutto è disattivato. I fornitori e l'azione pianificata sono disattivati. Senza un vostro intervento non viene inviato nulla.
- I testi lasciano il vostro server non appena è coinvolto un servizio in hosting. Una regola può essere contrassegnata come Riservata; in tal caso il testo viene visto solo dai fornitori indicati come in esecuzione su un'infrastruttura propria.
- Le chiavi si trovano in un campo visibile solo agli amministratori oppure in una variabile d'ambiente a cui rimanda soltanto il nome. Nei messaggi di errore vengono mascherate e vengono inviate negli header. Eccezione: la chiave facoltativa di MyMemory può essere trasmessa lì solo come parametro di query.
- Comando locale esegue un programma ed è perciò bloccato finché il parametro di sistema
ai_translation_consensus.allow_commandnon viene impostato suTrue. Il comando viene richiamato senza shell e viene eseguito in una directory temporanea vuota. - Prompt injection: le richieste contrassegnano il testo come dati. Le istruzioni contenute nel testo tradotto non vengono eseguite e un risultato che viola tag o segnaposto viene scartato.
- I servizi gratuiti hanno dei limiti. Pollinations consente in forma anonima una risposta ogni 45 secondi. L'opzione del fornitore
min_intervalrispetta l'intervallo e le risposte «Riprovare più tardi» vengono tenute in considerazione.
Installazione
git clone https://github.com/Alex0176/odoo-ai-translation-consensus.git
ln -s /pfad/odoo-ai-translation-consensus/ai_translation_consensus /pfad/addons/
ln -s /pfad/odoo-ai-translation-consensus/ai_translation_consensus_website /pfad/addons/
odoo-bin -c odoo.conf -d <datenbank> -i ai_translation_consensus --stop-after-init
Sono necessari Odoo 19 e il pacchetto Python requests. È inclusa una traduzione tedesca. Il modulo ponte ai_translation_consensus_website viene installato automaticamente se è presente website. Dopo l'installazione il servizio Odoo deve essere riavviato, perché il modulo contiene codice Python. Chi gestisce un sistema di produzione installa il modulo prima su una copia del database.
I primi passi: aprire il menu Traduzione IA → Fornitori, testare e attivare i servizi, poi Inizia qui e creare la prima regola. Con Cerca testi vengono generate le proposte, con Elabora un lotto vengono richiamati i fornitori. Iniziate con una regola piccola, ad esempio un singolo articolo del blog e due lingue, e controllate risultato e costi prima di mettere in coda un intero sito web.
limiti
- La qualità dipende dai modelli che attivate. La verifica incrociata riduce gli errori dei singoli modelli, ma non offre alcuna garanzia. Per i testi rilevanti dal punto di vista legale o della sicurezza il modulo non sostituisce un madrelingua.
- I costi crescono rapidamente. Un testo costa una chiamata per traduttore, una chiamata di verifica per revisore e, in caso di voto diviso, un secondo turno. Il contesto della pagina aumenta l'input di ogni chiamata. Una regola con 45 lingue di destinazione moltiplica il numero dei testi. Limitate le esecuzioni con Record per ricerca, Nuove proposte per ricerca e Proposte per esecuzione cron e aggiungete come revisori modelli economici o locali.
- Solo campi con
translate=True. Il testo formattato viene elaborato per blocco (il meccanismo dei term di Odoo). - Prezzi e nomi dei modelli cambiano. Le impostazioni predefinite non sono un listino aggiornato.
- Sviluppato per Odoo 19.0 Community. Le altre versioni non sono supportate.
Domande frequenti
Viene tradotto o sovrascritto qualcosa senza il mio consenso?
No, finché non attivate Accetta automaticamente in caso di accordo. Anche in tal caso vengono scritte solo le proposte con accordo. I fornitori e l'azione pianificata dopo l'installazione sono disattivati.
Ho bisogno di chiavi per i fornitori a pagamento?
Solo per i fornitori che ne richiedono una. Con Pollinations, MyMemory o un modello eseguito in locale (ad esempio Ollama) se ne può fare a meno. I servizi gratuiti sono spesso limitati e lenti; per un intero sito web sono per lo più adatti solo come integrazione.
Quanto costa una traduzione?
Dipende dal fornitore, dal modello, dalla lunghezza del testo e dal numero di lingue; per questo il modulo non indica cifre fisse. La dashboard mostra consumo e costi non appena avete inserito i prezzi e stima i costi residui dei testi in coda.
Posso mantenere riservati i testi?
Sì, con l'opzione di regola Riservata. In tal caso lavorano solo i fornitori contrassegnati come in esecuzione sulla vostra infrastruttura, ad esempio un Ollama locale.
Sostituisce la traduzione nativa di Odoo?
No. Il modulo utilizza il multilinguismo di Odoo e scrive nelle stesse traduzioni che altrimenti gestite a mano.
Con quale licenza è distribuito?
Con la AGPL-3. Errori e miglioramenti sono benvenuti come issue nel repository GitHub .
Supporto da parte di Biricon IT Services
Seguiamo installazioni Odoo per piccole e medie imprese: dall'introduzione alle personalizzazioni e alle migrazioni, fino alla gestione corrente. Se gestite il vostro sito web Odoo in più lingue, volete mettere in sicurezza le traduzioni con l'IA o portare un modulo in modo sicuro nella vostra istanza di produzione, saremo lieti di aiutarvi. Altri sviluppi propri: Archiviare un'azienda insieme agli utenti del portale, Numeri di documento da prefisso, anno e contatore e Firmenbuch e verifica degli indirizzi per clienti austriaci.
Aggiornamento: 3 novembre 2026. Versione del modulo 19.0.1.0.0. Le immagini mostrano dati di esempio inventati.