Vi sjekket alle maskinoversettelser. Det var selve sjekkene som var feil.
Språk
Før vi ga ut oversettelseskitet vårt, testet vi det på en liten eksempelapp: 70 strenger i seks formater (JSON, Flutter ARB, Android, Apple .strings, gettext og Markdown) til tysk, russisk, japansk, arabisk og spansk, med en åpen modell på 27 milliarder parametere på vår egen maskin. Hver oversatt streng går gjennom sjekker før den skrives. Fire av de 350 ble avvist. Alle de fire avvisningene var feil.
Hva sjekkene ser etter
En oversettelse som ødelegger en app er verre enn ingen, så hver streng må beholde sine plassholdere (%1$s, {name}, {{count}}), sine koder, linjeskift og URL-er; den må være i målspråkets skriftsystem; den må ikke være tom, løpe løpsk eller stå igjen på engelsk; og flertallsformer må dekke nøyaktig de kategoriene språket har. En streng som feiler, blir bedt om på nytt med problemet navngitt, og en som feiler igjen, utelates, slik at appen viser engelsk for den ene strengen.
De fire avvisningene
- «Backups» på tysk var «Backups». Sjekken mente det var uoversatt. Tysk bruker det engelske ordet. Ett identisk ord er ofte riktig; to eller flere identiske ord er ikke det, så det er regelen nå.
- En russisk og en japansk linje med en e-postadresse feilet skriftsystemssjekken: færre enn 60 % av bokstavene var kyrillisk eller japansk, fordi
[email protected]er skrevet med latinske bokstaver. Adresser behandles nå som plassholdere: de må komme tilbake uendret, og de telles ikke som bokstaver. - En japansk flertallsbeskjed kom tilbake som
{count, plural, =0{連続記録なし} other{{count}日連続}}. Grenen{連続記録なし}har ingen mellomrom, så mønsteret for plassholdere tok den for å være en variabel kalt 連続記録なし. Grenseklammer i flertallsbeskjeder er struktur nå, og plassholdernavn må være ASCII.
Da sjekkene var fikset, ba en ny runde modellen bare om de fire strengene, siden alt annet var i oversettelsesminnet, og skrev alle 350 på 45 sekunder.
Delen vi forventet ville feile, men som ikke gjorde det
Flertallsformer er der naiv oversettelse feiler: Engelsk har én og andre, russisk har én, få, mange og andre, arabisk seks kategorier, japansk én form. Vi ba om nøyaktig målspråkets kategorier og sjekket plassholderne i hver form. Modellen skrev «1 день, 2 дня, 5 дней» for russisk og alle de seks arabiske formene. Alle Android-flertallsformer besto på første forsøk på alle fem språk, og det samme gjorde alle flertallsbeskjeder unntatt den japanske som sjekken vår feiltolket.
Det ingen sjekk fanger
Vi oversatte deretter de 22 nettstrengene i eksemplet til alle de 42 språkene Polyglot kjenner: 924 av 924 strenger besto. Da vi leste gjennom dem, stakk én ut. På khmer hadde «You are offline» blitt oversatt til en setning som sier «du er online». Det er velformulert khmer i riktig skriftsystem uten at noe mangler, så alle sjekker godtok den. Sjekker fanger det som ødelegger appen; en feil mening krever en person som leser språket.
Konklusjonen
Automatiske sjekker på maskinutdata trenger reell utdata å teste mot. Enhetstester med påfunnede oversettelser besto; en ekte modell som skrev ekte japansk fant hullene på minutter. Polyglot leveres med disse sjekkene, fikset, og med testene for hver av de fire tilfellene.