Zum Inhalt springen

Blog ·

Ein Name, der sich nicht übersetzen lässt

Neun Sprachen sagten neun verschiedene Dinge über eine Fremdschlüsselklausel. Acht davon waren korrekte Übersetzungen, und genau darin lag das Problem.

Von Provibr

Wir veröffentlichen jeden Artikel in neun Sprachen. Ein Leser, der sich durch einen davon arbeitete, bemerkte etwas, das aufgeschrieben trivial aussieht und zwei Runden brauchte, um richtig behoben zu werden: ein Satz über einen Fremdschlüssel sagte in jeder Sprache etwas anderes, und alle neun hatten recht.

Der Satz erklärt, warum eine Kindzeile, die aufgeräumt wird, das Warten ihres Elternteils nicht mitnehmen darf. Im Schema ist das eine Klausel, und die Klausel hat einen Namen.

Acht korrekte Übersetzungen und kein Name

So sah dieselbe Klausel im Katalog aus, bevor wir sie angefasst haben.

SpracheWas der Satz sagte
Englischset null rather than cascade
Niederländischop leegmaken en niet op meeverwijderen
Deutschauf null setzen statt auf kaskadieren
Spanischpone a nulo en lugar de propagar el borrado
Französischmise à nul, pas cascade
Italienischimpostata a nullo invece che a cascata
Portugiesischanula em vez de propagar a eliminação
Rumänischpusă pe null și nu în cascadă
Ukrainischставить null, а не каскадує

Jeder einzelne davon ist ein guter Satz. Der niederländische ist wohl der bestgeschriebene der Liste; er erklärt das Verhalten jemandem, der nie ein Schema gesehen hat. Er ist auch der, der am weitesten davon entfernt ist, brauchbar zu sein, denn ein Leser, der nachprüfen will, was wir tatsächlich getan haben, hat nichts zum Eintippen.

Die beiden Dinge, die man in ein Postgres-Schema schreibt, sind SET NULL und CASCADE. Sie sind keine Beschreibungen eines Verhaltens, sie sind die Bezeichner eines Verhaltens, und die Beschreibung eines Bezeichners ist kein Bezeichner.

Der Defekt lag in der Quelle

Es ist verlockend, das als acht Übersetzungsfehler zu behandeln. Es ist ein Quellfehler, und ihn so zu lesen, ist das, was die Reparatur klein gemacht hat.

Das Englische sagte set null rather than cascade, klein geschrieben, im Satz mitlaufend, ohne Auszeichnung irgendeiner Art. Wer das zum Übersetzen bekommt, erzeugt Prosa, denn genau das ist es. Jeder einzelne der acht hat seine Arbeit am gegebenen Material richtig gemacht.

Die Änderung besteht also nicht aus acht Korrekturen. Sie ist eine Entscheidung über die Form, neunmal angewendet, und sie ändert auch das Englische.

Die Formfrage wurde durch Messen beantwortet, nicht durch Geschmack

Sollte es SET NULL in Großbuchstaben sein oder set null in Kleinbuchstaben? Beides ist im Abstrakten vertretbar, und im Abstrakten ist genau der Ort, an dem dieser Streit nie endet.

Also haben wir nachgesehen, was der Rest des Korpus mit SQL innerhalb von Backticks bereits tut. Es gibt neun Vorkommen: zweimal WHERE, zweimal UPDATE, zweimal DROP, ein bloßes DELETE, ein SELECT 1 in einer Überwachungsprüfung und ein FOR UPDATE SKIP LOCKED. Alle in Großbuchstaben.

Es gibt auch kleingeschriebene Tokens in Backticks, die wie Gegenbeispiele aussehen und keine sind. Ein unique, das sich als Flag in der API von jemandem erweist. Ein where, das der Name einer Konstante in JavaScript ist. Ein null, das ein Wert ist und keine Klausel.

Daraus ergibt sich die eigentliche Regel, und es geht dabei nicht um Großbuchstaben. Der Unterschied liegt zwischen einem Schlüsselwort und einem Namen. Ein Schlüsselwort der Sprache steht in Großbuchstaben, weil die Sprache so aufgeschrieben wird; ein Name, der zufällig wie eines aussieht, behält die Schreibung, die sein Eigentümer ihm gegeben hat. Allein nach der Schreibung zu entscheiden hätte hier die richtige Antwort aus dem falschen Grund erzeugt und anderswo die falsche.

Das Korpus erinnert außerdem daran, dass ein Token zwei Namen sein kann. Die meisten Vorkommen von DELETE in unseren Artikeln sind überhaupt kein SQL, sie sind die HTTP-Methode in Dingen wie DELETE /servers/{id}. Dieselben Buchstaben, eine andere Sprache, und keine Regel über Großbuchstaben unterscheidet sie.

Eine Formentscheidung hat einen Geltungsbereich, und der Geltungsbereich hat einen Rand

Die erste Runde reparierte den Artikel, den der Leser gelesen hatte. Eine Prüfung danach zeigte, dass ein zweiter Artikel dieselbe Aussage über ein Schema auf einer Zeile machte, ohne das Token, also nahm sich eine zweite Runde diesen vor.

Das ist klar zu sagen wert, denn eine Entscheidung über die Form ist nicht fertig, wenn die Datei fertig ist, die sie ausgelöst hat. Vor jener zweiten Runde meldete eine Tokenprüfung beide Namen als schlicht abwesend im Englischen; danach kam sie auf vierundzwanzig Zählungen über die Sprachen hinweg, ohne Abweichungen.

Der Rand ist der Teil, der das Nachdenken gekostet hat. Die Regel lautet benennt dieser Satz eine Klausel, nicht kommt das Wort Kaskade vor. Im selben Artikel, weiter unten im selben Absatz, steht ein Satz über eine Kaskade von einer kurzlebigen Tabelle in eine langlebige. Das ist die Beschreibung einer Folge und keine Bezugnahme auf eine Klausel, und sie bleibt Prosa in dem, was die Sprache natürlicherweise sagen würde.

Wir haben diese Grenze über den ganzen englischen Katalog gemessen, statt ihr zu vertrauen: drei Formulierungen, die plausibel eine Klausel benennen könnten, gesucht außerhalb von Backticks in jedem englischen Artikel. Damals neun Treffer, fünf davon in dem Artikel, um den es in der zweiten Runde ging. Die vier anderen waren eine Referenz, die auf einen null-Wert gesetzt wird, eine Abschnittsüberschrift über das Aufräumen beim Löschen als Strategie, eine Bemerkung, dass eine bestimmte Zeile an keiner Kaskade teilnimmt, und ein 404 auf eine Löschanfrage. Nicht einer davon benennt eine Klausel. Nach beiden Runden bleiben sieben, und der Artikel, den die erste Runde repariert hat, taucht in der Liste überhaupt nicht mehr auf, was die billigste denkbare Bestätigung dafür ist, dass die Änderung dorthin ging, wohin sie sollte.

Was bei der Sprache bleibt

Die Namen sind in allen neun Dateien identisch. Der Satz um sie herum ist es nicht und soll es auch nicht sein.

Im Deutschen steht der Fremdschlüssel weiterhin auf, im Niederländischen staat op, im Portugiesischen está em. Das Verb, die Präposition und die Wortstellung gehören der Sprache. Nur die beiden Namen liegen fest, und sie liegen fest, weil sie Zitate aus Postgres sind und keine Aussagen von uns.

Die mechanischen Teile hielten. Der Renderer erzeugt ein echtes Code-Element auch dann, wenn das Token in fettem Text steht, was in der nummerierten Liste am Ende jedes Artikels der Fall ist. Das französische geschützte Leerzeichen vor einem Doppelpunkt überlebte eine Reparatur, die die Klausel unmittelbar davor neu geschrieben hat, und so etwas verschwindet still, wenn jemand eine Zeile neu tippt.

Und die Diffs sind der Beleg dafür, dass die Regel eng genug war. Drei Zeilen hinein und drei Zeilen heraus je Datei in der ersten Runde, eine hinein und eine heraus in der zweiten. Eine Reparatur dieser Art, die zehn Zeilen berührt, hat etwas umdekoriert.

Was wir aufschreiben würden

  1. Acht korrekte Übersetzungen können trotzdem ein Defekt sein. Die Richtigkeit des Satzes ist nicht dasselbe wie das Vorhandensein des Namens.
  2. Der Defekt liegt meistens in der Quelle. Prosa hinein, Prosa heraus, und die Übersetzer sind nicht das Problem.
  3. Ein Name ist eine Formfrage und keine Sprachfrage. Er wird einmal ausgezeichnet und überallhin kopiert.
  4. Messen Sie die Hausform am Korpus, statt sie im Abstrakten zu debattieren.
  5. Der Unterschied ist Schlüsselwort gegen Name, nicht groß gegen klein.
  6. Ein Token kann zwei Namen sein. Das meiste unserer DELETE ist HTTP und nicht SQL.
  7. Ziehen Sie die Grenze daran, ob ein Satz eine Klausel benennt, nicht daran, ob das Wort vorkommt.
  8. Prüfen Sie den Schwesterartikel. Eine Formentscheidung hat einen Geltungsbereich, und der ist selten eine Datei.
  9. Überlassen Sie das Verb der Sprache. Den Namen zu reparieren heißt nicht, den Satz zu reparieren.
  10. Ein kleiner Diff ist der Beleg. Drei Zeilen hinein und drei heraus heißt, dass die Regel eng war.

Zur Klarheit darüber, was das ist: zwei Runden, die erste setzte die beiden Namen in neun Dateien bei je drei Zeilen hinein und drei Zeilen heraus, die zweite machte eine Zeile hinein und eine heraus in einem zweiten Artikel; der Inhaltsbau erzeugte 886 Artikel ohne Warnungen, und die Inhaltsprüfung fand 887 von 887 erzeugten Dateien Byte für Byte gleich, die Web-Suite 4604 grün, der Tokenvergleich bei 40 Zählungen und danach bei 24 Zählungen ohne Abweichungen, der Faktenvergleich bei 296 und 256 ohne, der Byte-Durchlauf sauber und drei Wachen rot bewiesen, bevor ihnen grün geglaubt wurde. Die Korpuslesung waren drei Formulierungen über 124 englische Artikel. Nicht bewiesen: jede Übersetzung hat weiterhin einen Leser, keiner von ihnen ist Muttersprachler, und es gibt keine Browserprüfung dafür, wie das Token in allen neun Sprachen dargestellt wird.

Aus der Plattformarbeit an Provibr. Der Artikel, um den es dabei ging, ist Der Kindlauf weckt den Elternlauf, was neun Kataloge mit einem Satz fester Bedienelemente anstellen, steht in Sechzehntausend Schlüssel, neun Sprachen, und ein weiterer Fall, in dem die Übersetzung richtig und die Gestalt falsch war, steht in Die Auswahl umfasst den ganzen Satz.

Fangen Sie mit einem Host und einem Agenten an

Konto erstellen, den Agenten mit einem einzigen Befehl installieren und Ihren ersten Proxmox-Host verbinden. Die Testphase läuft 14 Tage und fragt nicht nach Zahlungsdaten.