Übersetzt wird der Stream, nicht der Bildschirm
Eine Web-Session wird als rrweb-Event-Stream aufgezeichnet: ein vollständiger Snapshot des DOM, gefolgt von einer Folge von Mutationen. Der naheliegende Weg, ein Replay zu übersetzen, wäre, den Player die Seite aufbauen zu lassen und danach die gefundenen Textknoten umzuschreiben. Genau das ist der falsche Weg. Jede Mutation, jeder Sprung in der Zeitleiste und jeder Neustart baut einen Teil der Seite neu auf – die Ersetzung muss also jedes Mal erneut greifen und liefert sich dabei ein Wettrennen mit dem Player.
AnyReplay übersetzt stattdessen die Events. Bevor der Player irgendetwas zu sehen bekommt, werden die Texte aus dem Snapshot und aus jeder Mutation extrahiert, übersetzt und wieder eingesetzt. Der Player baut dann eine bereits übersetzte Seite auf, und all diese Probleme verschwinden. Beide Hälften – Extraktion und Ersetzung – sind reine Funktionen. Deshalb lässt sich der heikelste Teil des Produkts ohne Browser testen.
Jeder Text bringt seinen Kontext mit
Oberflächentexte sind keine Prosa. „Save“ auf einem Button und „save“ in einem Satz verlangen in vielen Sprachen unterschiedliche Wörter, und ein Label muss kurz genug bleiben, um in sein Bedienelement zu passen. Deshalb trägt jeder extrahierte Text einen Kontext: heading, button, label, link, input, attribute oder text. Attribute, die man beim Prüfen lesen möchte – placeholder, title, alt, aria-label –, werden übersetzt; der Inhalt von script, style, code, pre und svg bleibt immer unangetastet.
Jeder Text geht mit einem Index an das Modell, und jede Übersetzung muss diesen Index zurückliefern. Die Zuordnung über die Position wirkt einfacher, ist aber eine Falle: Ein Modell, das um vierzig Texte gebeten wird, liefert gelegentlich neununddreißig – und ohne Index landet jede Übersetzung nach der Lücke beim falschen Text. Mit Index kostet ein fehlender Eintrag genau einen Text, und der bleibt einfach in seiner Originalsprache. Also genau so, wie ihn die prüfende Person ohnehin vor sich hatte.
Ein Glossar für Wörter, die sich nicht ändern dürfen
Produktnamen, Funktionsnamen und die Handvoll Begriffe, die Ihr Unternehmen auf eigene Weise schreibt, überstehen die Übersetzung, weil Sie dem Modell sagen, dass sie es müssen. Ein organisationsweites Glossar ordnet einem Begriff seine verbindliche Übersetzung zu – oder sich selbst, also „genau so lassen“ – und hat Vorrang vor dem Urteil des Modells. Das Glossar ist in den Plänen Team, Business und Enterprise enthalten; siehe Preise.
Einmal übersetzt, nach Inhalt zwischengespeichert
Texte werden gehasht und organisationsweit zwischengespeichert, sodass ein in einem Projekt übersetzter Text von jedem anderen Projekt derselben Organisation wiederverwendet wird. Ein Button, der in zehntausend Sessions vorkommt, wird einmal übersetzt, und wer danach eine dieser Sessions in derselben Sprache öffnet, bekommt die Übersetzung sofort. Angefordert wird sie erst, wenn jemand eine Session in einer anderen Sprache als der Aufzeichnungssprache abspielt; nichts wird vorsorglich übersetzt, und nichts verlässt den Bereich Ihrer Organisation.
Und maskierte Felder?
Eine maskierte Eingabe wird auf dem Gerät oder im Browser des Nutzers durch Sternchen ersetzt, bevor die Aufzeichnung gesendet wird. Wenn der Stream beim Übersetzungsschritt ankommt, gibt es keinen Wert mehr zu übersetzen – und genau darum geht es. Die Datenschutzseite beschreibt, was maskiert wird, was nicht und was nie aufgezeichnet wird.
Mobile Sessions werden genauso übersetzt
Eine React-Native-Aufzeichnung ist bereits ein Baum aus Elementtypen und Text, keine Sammlung von Screenshots. Sie durchläuft deshalb dieselbe Pipeline: extrahieren, mit Kontext übersetzen, einsetzen, abspielen. Aus genau diesem Grund verzichtet der Mobile-Recorder auf Pixel. Ein Screenshot eines türkischen Screens bleibt für immer ein Screenshot; ein aufgezeichneter Text ist nur eine Übersetzung von jeder beliebigen Sprache entfernt.
Fünf Dashboard-Sprachen, fünf Replay-Sprachen
Das Dashboard selbst gibt es auf Englisch, Türkisch, Deutsch, Spanisch und Französisch – und ein Test lässt den Build fehlschlagen, sobald eine Sprache nicht mehr mit den Ausgangstexten übereinstimmt. Die Replay-Übersetzung wird heute in dieselben fünf Sprachen angeboten; weitere Sprachen sind auf Anfrage möglich. Direkte Gegenüberstellungen mit anderen Tools finden Sie unter Vergleich, die technischen Hintergründe zu dieser Seite in unserem Blog.
