Naar de inhoud

Blog ·

Een naam die je niet kunt vertalen

Negen talen zeiden negen verschillende dingen over één foreign-keyclausule. Acht ervan waren correcte vertalingen, en dat was nu juist het hele probleem.

Door Provibr

We publiceren elk artikel in negen talen. Een lezer die er een doorwerkte merkte iets op wat opgeschreven triviaal lijkt en twee rondes kostte om goed te repareren: een zin over een foreign key zei in elke taal iets anders, en alle negen hadden gelijk.

Die zin legt uit waarom een kindrij die opgeruimd wordt de wachtstand van zijn ouder niet mag meenemen. In het schema is dat één clausule, en die clausule heeft een naam.

Acht correcte vertalingen en geen naam

Zo zag dezelfde clausule er in de catalogus uit voordat we hem aanraakten.

TaalWat de zin zei
Engelsset null rather than cascade
Nederlandsop leegmaken en niet op meeverwijderen
Duitsauf null setzen statt auf kaskadieren
Spaanspone a nulo en lugar de propagar el borrado
Fransmise à nul, pas cascade
Italiaansimpostata a nullo invece che a cascata
Portugeesanula em vez de propagar a eliminação
Roemeenspusă pe null și nu în cascadă
Oekraïensставить null, а не каскадує

Elk van die zinnen is een goede zin. Het Nederlands is aantoonbaar het beste geschreven van de lijst; het legt het gedrag uit aan iemand die nog nooit een schema gezien heeft. Het is ook de zin die het verst van bruikbaar af staat, want een lezer die wil nakijken wat we werkelijk gedaan hebben, heeft niets om in te typen.

De twee dingen die je in een Postgres-schema schrijft zijn SET NULL en CASCADE. Het zijn geen beschrijvingen van een gedrag, het zijn de identificaties ervan, en een beschrijving van een identificatie is geen identificatie.

Het defect zat in de bron

Het is verleidelijk om dit als acht vertaalfouten te behandelen. Het is één bronfout, en het zo lezen is wat de reparatie klein maakte.

Het Engels zei set null rather than cascade, in kleine letters, meelopend in de zin, zonder enige markering. Geef dat aan een vertaler en je krijgt proza, want dat is het. Alle acht deden hun werk correct op het materiaal dat ze gekregen hadden.

De wijziging is dus niet acht correcties. Het is één beslissing over vorm, negen keer toegepast, en ze verandert ook het Engels.

De vormvraag is beantwoord door te meten, niet met smaak

Moet het SET NULL in hoofdletters zijn, of set null in kleine letters? Allebei zijn ze in het abstracte verdedigbaar, en in het abstracte is precies waar dat argument nooit eindigt.

We hebben dus gekeken wat de rest van het corpus al met SQL tussen backticks doet. Er zijn negen voorkomens: WHERE twee keer, UPDATE twee keer, DROP twee keer, een kaal DELETE, een SELECT 1 in een monitoringcontrole, en één FOR UPDATE SKIP LOCKED. Allemaal in hoofdletters.

Er staan ook tokens in kleine letters tussen backticks die op tegenvoorbeelden lijken en het niet zijn. Een unique die een vlag op de API van iemand blijkt te zijn. Een where die de naam van een constante in JavaScript is. Een null die een waarde is en geen clausule.

Dat geeft de werkelijke regel, en die gaat niet over hoofdletters. Het onderscheid loopt tussen een sleutelwoord en een naam. Een sleutelwoord van de taal gaat in hoofdletters omdat de taal zo opgeschreven wordt; een naam die er toevallig als een sleutelwoord uitziet houdt de schrijfwijze die zijn eigenaar hem gaf. Op hoofdletters alleen beslissen had hier het goede antwoord opgeleverd om de verkeerde reden, en ergens anders het verkeerde antwoord.

Het corpus herinnert er ook aan dat één token twee namen kan zijn. De meeste voorkomens van DELETE in onze artikelen zijn helemaal geen SQL, het is de HTTP-methode in dingen als DELETE /servers/{id}. Dezelfde letters, een andere taal, en geen enkele regel over hoofdletters onderscheidt ze.

Een vormbeslissing heeft een bereik, en dat bereik heeft een rand

De eerste ronde repareerde het artikel dat de lezer aan het lezen was. Een controle achteraf liet zien dat een tweede artikel dezelfde uitspraak over een schema op één regel deed, zonder het token, dus een tweede ronde deed dat artikel.

Dat is het waard om ronduit te zeggen, want een beslissing over vorm is niet klaar als het bestand dat hem uitlokte klaar is. Vóór die tweede ronde meldde een tokencontrole beide namen als eenvoudigweg afwezig in het Engels; erna kwam ze op vierentwintig tellingen over de talen zonder afwijkingen.

De rand is het deel waar het denkwerk in zat. De regel is noemt deze zin een clausule, en niet komt het woord cascade voor. In hetzelfde artikel, verderop in dezelfde alinea, staat een zin over een cascade van een kortlevende tabel naar een langlevende. Dat is een beschrijving van een gevolg en geen verwijzing naar een clausule, en die blijft proza in wat de taal er van nature over zou zeggen.

We hebben die grens over de hele Engelse catalogus gemeten in plaats van erop te vertrouwen: drie formuleringen die aannemelijk een clausule zouden kunnen noemen, gezocht buiten backticks in elk Engels artikel. Negen treffers destijds, waarvan vijf in het artikel waar de tweede ronde over ging. De vier andere waren een verwijzing die op een nulwaarde gezet werd, een sectiekop over opruimen bij verwijderen als strategie, een opmerking dat een bepaalde rij in geen enkele cascade meedoet, en een 404 op een verwijderverzoek. Geen van alle noemt een clausule. Na beide rondes blijven er zeven over, en het artikel dat de eerste ronde repareerde staat helemaal niet meer in de lijst, wat de goedkoopst mogelijke bevestiging is dat de wijziging terechtkwam waar hij hoorde.

Wat bij de taal blijft

De namen zijn in alle negen bestanden identiek. De zin eromheen is dat niet, en hoort dat ook niet te zijn.

Het Duits zegt nog steeds dat de foreign key steht auf, het Nederlands staat op, het Portugees está em. Het werkwoord, het voorzetsel en de woordvolgorde horen bij de taal. Alleen de twee namen liggen vast, en ze liggen vast omdat het citaten uit Postgres zijn en geen uitspraken van ons.

De mechanische delen hielden stand. De renderer levert een echt code-element op, ook als het token binnen vetgedrukte tekst staat, wat het geval is in de genummerde lijst aan het eind van elk artikel. De Franse onbreekbare spatie vóór een dubbelepunt overleefde een reparatie die de clausule er vlak voor herschreef, en dat is het soort dingen dat stilletjes verdwijnt als iemand een regel overtypt.

En de diffs zijn het bewijs dat de regel smal genoeg was. Drie regels erin en drie regels eruit per bestand in de eerste ronde, één erin en één eruit in de tweede. Een reparatie van dit soort die tien regels raakt heeft iets opnieuw ingericht.

Wat we zouden opschrijven

  1. Acht correcte vertalingen kunnen nog steeds een defect zijn. Dat de zin klopt is niet hetzelfde als dat de naam er staat.
  2. Het defect zit meestal in de bron. Proza erin, proza eruit, en de vertalers zijn niet het probleem.
  3. Een naam is een vormvraag, geen taalvraag. Hij wordt één keer gemarkeerd en overal gekopieerd.
  4. Meet de huisstijl op het corpus in plaats van erover te discussiëren in het abstracte.
  5. Het onderscheid is sleutelwoord tegenover naam, niet hoofdletters tegenover kleine letters.
  6. Eén token kan twee namen zijn. Het merendeel van onze DELETE is HTTP en geen SQL.
  7. Trek de grens bij de vraag of een zin een clausule noemt, en niet bij de vraag of het woord voorkomt.
  8. Controleer het zusterartikel. Een vormbeslissing heeft een bereik, en dat is zelden één bestand.
  9. Laat het werkwoord aan de taal. De naam repareren betekent niet de zin repareren.
  10. Een kleine diff is het bewijs. Drie regels erin en drie eruit betekent dat de regel smal was.

Voor de duidelijkheid over wat dit is: twee rondes, de eerste die de twee namen in negen bestanden zette met drie regels erin en drie regels eruit per bestand, de tweede die één regel erin en één eruit deed op een tweede artikel; de contentbuild leverde 886 artikelen zonder waarschuwingen op en de contentcontrole vond 887 van de 887 gegenereerde bestanden byte-identiek, de websuite 4604 groen, de tokenvergelijking op 40 tellingen en daarna 24 tellingen zonder afwijkingen, de feitenvergelijking op 296 en 256 zonder afwijkingen, de byteveeg schoon, en drie bewakingen rood bewezen voordat ze groen geloofd werden. De corpuslezing was drie formuleringen over 124 Engelse artikelen. Onbewezen: elke vertaling heeft nog steeds één lezer, geen van hen is moedertaalspreker, en er is geen browsercontrole van hoe het token in alle negen talen rendert.

Uit het platformwerk aan Provibr. Het artikel waar dit allemaal over ging is het kind wekt de ouder, wat negen catalogi met een verzameling vaste knoppen doen staat in zestienduizend sleutels, negen talen, en een ander geval waarin de vertaling klopte en de vorm fout was staat in de select staat om de hele zin.

Begin met één host en één agent

Maak een account aan, installeer de agent met één commando en koppel je eerste Proxmox-host. De proefperiode loopt 14 dagen en vraagt geen betaalgegevens.