Blog ·
Drie fouten die geen script kon zien
Acht artikelen in acht talen kwamen door elke automatische controle. Een lezer vond een verzonnen getal, een halve zin en een titel die elke link tegensprak.
Door Provibr
We publiceren in negen talen. Engels is de bron en de andere acht zijn vertalingen, en daar staat een muur van automatisering omheen: een structuurvergelijking die controleert of koppen, tabellen en lijsten op elkaar aansluiten, een feitenvergelijking die de codefragmenten en de getallen uit elke alinea trekt en eist dat ze overeenkomen, een typografietest per taal, een linkcontrole, een tabelcontrole en een layoutveeg op 390 pixels.
Acht artikelen waren daar allemaal doorheen gekomen. Toen ging een tweede lezer die acht in acht talen door en vond in elk daarvan verbeterpunten: 44 in het Nederlands, 40 in het Duits, 47 in het Spaans, 35 in het Frans, 39 in het Italiaans, 22 in het Portugees, 55 in het Roemeens, 23 in het Oekraïens, en 18 die over de talen heen liepen. De diff was precies 307 regels eruit en 307 regels erin over 62 bestanden.
De meeste daarvan zijn gewone vertaalkwaliteit: een register dat wegzakte, een bijzin die als machine-uitvoer leest, een term die niet is wat de branche in die taal zegt. Drie ervan zijn een ander soort ding, en die drie zijn de reden dat dit het opschrijven waard is.
Een getal dat niemand gemeten had
Eén artikel beschreef een kalibratieproef: een script dat opzettelijke defecten op een pagina plant en daarna eist dat de detector ze vindt, zodat een run die nul bevindingen meldt te onderscheiden is van een run die niet gekeken heeft.
Vier van de acht vertalingen zeiden dat de proef drie bevindingen eist.
Niemand had het nagekeken, want een getal in een zin over andermans gereedschap ziet eruit als een feit dat je geërfd hebt. Het script plant drie elementen en eist vier soorten bevinding. De brontekst, in het Engels, zei twee. Een notitie die tijdens de review geschreven was, zei drie. De vertalingen meegeteld zijn dat drie uitspraken over het getal en twee verschillende waarden, en geen van die waarden is het getal dat het script eist; elk ervan was trouw in meerdere talen overgenomen.
De reparatie was niet het getal verbeteren. Het was het getal weghalen. De zin noemt de drie geplante defecten nu bij wat ze zijn, en geen enkele vertaling noemt nog een aantal, want een aantal op die plek voegt niets toe wat een lezer nodig heeft en is een gijzelaar van een script dat iemand nog eens gaat bewerken.
De algemene vorm: een getal dat uit een samenvatting komt in plaats van uit het ding dat het beschrijft gaat een keer afdrijven, en het drijft stilletjes af, want het is nog steeds een aannemelijk getal.
Een zin die zijn tweede helft verloor
Een Engelse zin maakte een tegenstelling: dit is een weigering en geen terugval. In twee talen overleefde alleen de eerste helft. Wat overbleef was grammaticaal, vloeiend, en zei iets zwakkers en net iets anders dan wat de bron zei.
Het interessante is hoe het gevonden werd. Zes van de acht lezers, onafhankelijk aan hun eigen taal werkend, markeerden dezelfde zin. In zes talen was hij al goed. Twee waren de tegenstelling kwijt en waren de reden dat hij bleef terugkomen.
Een structuurvergelijking kan dit niet zien, want een alinea die één bijzin korter is, is nog steeds een alinea. Een feitenvergelijking kan het niet zien, want er zit geen getal en geen codefragment in. Het enige dat een weggevallen tegenstelling vangt is iemand die de zin leest en zich afvraagt waar hij tegenover staat.
Een titel die het oneens was met elke link die ernaar wees
Onze artikelen linken naar elkaar. De Engelse bron van artikel vier had een titel waarin het ene ding naast het andere stond, en elke inkomende link gebruikte dezelfde bewoording.
In vier talen was de titel vertaald als onder en elke inkomende link als naast. Een lezer klikte dus op een link die het ene beloofde en landde op een pagina waarvan de kop iets anders beweerde.
De linkcontrole laat dit zonder klagen door, en het is de moeite waard om precies te zijn over waarom: hij controleert dat het doel van een link bestaat en antwoordt. Een link met de verkeerde tekst wijst naar een pagina die bestaat. Er is niets voor een HTTP-controle om op te merken.
De oplossing is een regel en geen reparatie: de titel van een artikel en elke link die ernaar wijst zijn in een vertaling één tekst, en ze worden als één tekst nagekeken. Dat is makkelijk gezegd en makkelijk vergeten, want de twee wonen in verschillende bestanden.
Twee nieuwe bewakingen, en waarom er één achterstevoren moet tellen
Twee van deze drie zijn nu geautomatiseerd, en de automatisering is rood bewezen voordat ze vertrouwd werd, op een kopie van de boom met defecten erin geplant.
De eerste bewaking dekt onvertaalbare namen buiten codefragmenten. De feitenvergelijking dekt alles tussen backticks al. Wat zij niet kan zien is een productnaam, een protocolnaam of een menu-item dat zonder backticks in lopende tekst staat: dat zijn precies de tokens die vertalers vertalen, uit instinct correct en in werkelijkheid fout. In een eerdere ronde hadden drie talen de naam van een menu vertaald; in een andere hadden alle acht een CSS-eigenschap uit een codefragment gehaald en er proza van gemaakt.
De tweede bewaking dekt getallen die als woord geschreven zijn. De feitenvergelijking normaliseert cijfers over talen heen, dus een duizendtalscheider die als punt, als spatie of als komma geschreven is komt er allemaal gelijk uit. Ze is per constructie blind voor een uitgeschreven getal, en in deze huisstijl is bijna elk getal in de Engelse bron uitgeschreven.
Die bewaking heeft een subtiliteit die een eerste versie haar geloofwaardigheid kostte. Ze telt per artikel hoe vaak elke waarde voorkomt, in de bron als woord of als cijfer en in elke vertaling als het telwoord van die taal of als cijfer. De naïeve uitvoering telt elke waarde onafhankelijk, en dan wordt "eenenveertig" ook geteld als een voorkomen van "veertig". Bij de eerste run leverde dat 37 valse treffers op, en dat is meer dan genoeg om iemand te laten concluderen dat de bewaking ruis is en er niet meer naar te kijken.
De oplossing is van de grootste waarde naar beneden te tellen en elke treffer uit de tekst te verwijderen zodra hij gevonden is, zodat er tegen de tijd dat "veertig" gezocht wordt geen "eenenveertig" meer over is. Dat is een klein implementatiedetail met een groot gevolg: een bewaking die vals alarm slaat is erger dan geen bewaking, want ze leert mensen een regel in de uitvoer over te slaan.
Wat de lezer fout had
Eén bevinding in de review was zelf onjuist, en dat is leerzaam.
De Nederlandse lezer meldde dat de nadruk op een bepaald woord in alle acht de talen verloren was gegaan. Zes van de acht hadden hem wel. De Nederlandse lezer kon één bestand goed zien en had de rest afgeleid.
Dat is nu een regel: een lezer die aan één taal werkt rapporteert over die taal. Een bewering over acht bestanden is een meting, en die vraagt om een script of om acht open bestanden, niet om een indruk.
Er was een verwante bevinding die geen fout bleek maar een echte tweedeling. Vier van de acht Nederlandse artikelen gebruikten het formele register en vier het informele. Over de hele Nederlandse catalogus zijn 47 van de 90 bestanden formeel. Dat is geen defect dat je in acht bestanden repareert; het is een beslissing die één keer genomen en overal toegepast moet worden, en de ronde heeft dat opgeschreven in plaats van stilletjes een kant te kiezen.
Zes dingen die fout waren in de bron
De review leverde ook zes bevindingen op die helemaal geen vertaalprobleem waren. Het Engels was fout, en acht talen hadden het foute trouw vertaald.
Die zijn bewust niet in acht talen gerepareerd. Ze zijn tegen de bron gemeld en in een aparte ronde afgehandeld die eerst het Engels wijzigde en daarna elke gecorrigeerde zin door de acht vertalingen trok, zodat de acht vertalingen van iets bleven in plaats van acht onafhankelijke reparaties van dezelfde zin.
Die ronde vond zelf ook iets: de notitie die een van die zes beschreef had het zelf mis over de getallen, en daar komt het aantal uit de eerste sectie van dit artikel vandaan. Een correctie die niet tegen de bron geverifieerd is, is gewoon weer een bewering.
Wat we zouden opschrijven
- Automatisering controleert vorm en feiten; ze controleert geen betekenis. Elk van deze acht artikelen was groen.
- Een getal dat je uit een samenvatting geërfd hebt is op een dag fout. Toets het tegen het ding, of haal het weg.
- De beste reparatie van een broos getal is vaak geen getal. Noem de dingen in plaats van ze te tellen.
- Een weggevallen tegenstelling laat een grammaticale zin achter. Alleen een lezer vindt hem.
- Zes lezers die dezelfde zin markeren zeggen iets over de bron, niet over zes vertalingen.
- Een link met de verkeerde tekst wijst naar een pagina die bestaat. Geen enkele HTTP-controle zal dat ooit opmerken.
- Een titel en elke link ernaartoe zijn één tekst. Kijk ze samen na, ook al wonen ze apart.
- Bewijs een nieuwe bewaking rood voordat je haar groen gelooft. Plant het defect op een kopie van de boom.
- Een bewaking met valse treffers wordt genegeerd, en dat is erger dan geen bewaking hebben. Tel van groot naar klein en haal weg wat je matcht.
- Een lezer rapporteert over zijn eigen taal. Een bewering over acht bestanden is een meting.
Voor de duidelijkheid over wat dit is: de feitenvergelijking liep over 2432 alinea's zonder bevindingen, de structuurvergelijking over acht artikelen in acht talen zonder bevindingen, de tokenbewaking 248 controles en de telwoordbewaking 240 controles zonder bevindingen, de contentcontrole 815 van de 815 gegenereerde bestanden byte-identiek, de websuite 4572 groen, de metadatacontrole 288 van de 288, links 153 van de 153, tabellen 198 van de 198 en de layoutveeg 168 van de 168 op 390 pixels tegen een productiebuild. De typografietest is rood bewezen op 28 geslaagd en 3 gefaald met geplante defecten en groen op 31 daarna. Onbewezen: er is nog steeds één lezer per taal en geen van hen is moedertaalspreker, en er is in deze ronde geen toegankelijkheids- of layoutverschuivingsmeting gedaan. Twee terminologievragen zijn geëscaleerd in plaats van beslist.
Uit het platformwerk aan Provibr. Wat negen catalogi met een verzameling vaste knoppen doen staat in zestienduizend sleutels, negen talen, en een omzettingsscript dat drie artikelen beschadigde waar het nooit op gericht was staat in een omzettingsscript dat te breed liep.