Abbiamo controllato ogni traduzione automatica. Gli errori erano nei controlli.
Lingue
Prima di rilasciare il nostro kit di traduzione, lo abbiamo testato su una piccola app di esempio: 70 stringhe in sei formati (JSON, Flutter ARB, Android, Apple .strings, gettext e Markdown) tradotte in tedesco, russo, giapponese, arabo e spagnolo, utilizzando un modello open da 27 miliardi di parametri sulla nostra macchina. Ogni stringa tradotta viene sottoposta a controlli prima di essere salvata. Quattro delle 350 sono state rifiutate. Tutti e quattro i rifiuti erano errati.
Cosa cercano i controlli
Una traduzione che rompe un'app è peggio di nessuna traduzione, quindi ogni stringa deve mantenere i suoi segnaposto (%1$s, {name}, {{count}}), i suoi tag, gli a capo e gli URL; deve essere nello script della lingua di destinazione; non deve essere vuota, fuori controllo o lasciata in inglese; e le forme plurali devono coprire esattamente le categorie previste dalla lingua. Una stringa che fallisce viene richiesta di nuovo specificando il problema, e una che fallisce di nuovo viene esclusa, così l'app mostrerà l'inglese per quella stringa.
I quattro rifiuti
- "Backups" in tedesco era "Backups". Il controllo lo ha considerato non tradotto. Il tedesco usa la parola inglese. Una sola parola identica è spesso corretta; due o più parole identiche non lo sono, quindi questa è ora la regola.
- Una riga russa e una giapponese con un indirizzo e-mail hanno fallito il controllo dello script: meno del 60% delle lettere era cirillico o giapponese, perché
[email protected]è scritto in lettere latine. Gli indirizzi sono ora trattati come segnaposto: devono tornare invariati e non contano come lettere. - Un messaggio plurale in giapponese è tornato come
{count, plural, =0{連続記録なし} other{{count}日連続}}. Il ramo{連続記録なし}non ha spazi, quindi il pattern dei segnaposto lo ha interpretato come una variabile chiamata 連続記録なし. Le parentesi graffe dei rami nei messaggi plurali sono ora struttura, e i nomi dei segnaposto devono essere ASCII.
Una volta corretti i controlli, una seconda esecuzione ha chiesto al modello solo quelle quattro stringhe, poiché tutto il resto era nella memoria di traduzione, e ha scritto tutte le 350 in 45 secondi.
La parte che ci aspettavamo fallisse e invece non ha fallito
Le forme plurali sono il punto in cui la traduzione ingenua si rompe: l’inglese ha una e altre, il russo ha una, poche, molte e altre, l’arabo sei categorie, il giapponese una sola forma. Abbiamo richiesto esattamente le categorie della lingua di destinazione e verificato i segnaposto di ogni forma. Il modello ha scritto "1 день, 2 дня, 5 дней" per il russo e tutte le sei forme arabe. Ogni plurale Android ha superato il primo tentativo in tutte le cinque lingue, così come ogni messaggio plurale tranne quello giapponese che il nostro controllo ha letto male.
Ciò che nessun controllo può rilevare
Abbiamo poi tradotto le 22 stringhe web dell’esempio in tutte le 42 lingue che Polyglot conosce: 924 su 924 stringhe hanno superato il test. Leggendole, una spiccava. In khmer, "You are offline" era tornata come una frase che dice "sei online". È un khmer ben formato, nello script corretto e senza nulla di mancante, quindi ogni controllo l’ha accettata. I controlli rilevano ciò che rompe un’app; un significato sbagliato richiede una persona che legga la lingua.
Il punto chiave
I controlli automatici sull’output della macchina hanno bisogno di output reali contro cui essere testati. I test unitari con traduzioni inventate passavano; un modello reale che scriveva vero giapponese ha trovato le lacune in pochi minuti. Polyglot include questi controlli, corretti, e i test per ciascuno dei quattro casi.