Zum Inhalt springen
Zum Inhalt springen

Referenz / CLI

Maschinell übersetzte Seite

Diese Seite wurde automatisch übersetzt und kann daher Fehler oder seltsame Formulierungen enthalten. Die englische Version ist die maßgebliche Quelle. Das englische Original lesen.

verbatra pseudo

Erzeuge aus deinen Quellstrings eine Pseudo-Locale, damit abgeschnittene Buttons und nicht extrahierte Labels auffallen, ohne Provider-Aufruf und ohne API-Key.

Lass deine App in einer Sprache laufen, die es nicht gibt. pseudo baut aus deinen Quellstrings eine Fake-Locale: Jeder Wert bekommt Akzente, wird länger und steckt zwischen sichtbaren Markern, sodass abgeschnittene Buttons, zusammengestückelte Sätze und nie extrahierte Labels auffallen. Mit --mode bidi zeigt er stattdessen jeden String von rechts nach links. Der Befehl erstellt keinen Provider, liest keinen API-Key und macht keine Netzwerkanfrage, er funktioniert also, bevor es einen API-Key gibt.

Synopsis

verbatra pseudo [flags]

Beispiele

# en-XA unter .verbatra-local/pseudo erzeugen
verbatra pseudo

# jeden String in ar-XB von rechts nach links darstellen
verbatra pseudo --mode bidi

# dorthin schreiben, wo der Dev-Server schon statische Dateien ausliefert (eine Bidi-Datei nicht committen: GitHub markiert ihr verstecktes Unicode)
verbatra pseudo --out public/locales-pseudo

# maschinenlesbares Ergebnis für ein Skript
verbatra pseudo --json

Flags

FlagArgumentStandardWirkung
--mode<mode>accented die Transformation: accented oder bidi, das jedes Wort von rechts nach links darstellt (sonst INVALID_OPTION)
--locale<code>en-XA (ar-XB mit --mode bidi)die zu erzeugende Pseudo-Locale; nur Buchstaben, Ziffern und Bindestriche (sonst INVALID_LOCALE)
--out<path>.verbatra-local/pseudoVerzeichnis, unter das die Pseudo-Locale geschrieben wird, relativ zum Arbeitsverzeichnis und innerhalb der Projektwurzel; ein leerer Wert ist INVALID_OUT

Außerdem nimmt der Befehl die globalen Flags --cwd, --config und --json.

Verhalten

Was die Transformation tut

SchrittWas du siehst
Akzentejeder ASCII-Buchstabe wird zu einem akzentuierten Doppelgänger, Save liest sich also Śáṽé
Verlängernder Wert wächst um etwa ein Drittel seiner übersetzbaren Länge, ungefähr das, was Deutsch gegenüber Englisch braucht
Markierender Wert steht zwischen [ und ], ein abgeschnittener oder zusammengesetzter String fällt also sofort auf

Aus Hello {{name}}, you have {{count}} unread messages wird [Ĥéĺĺó {{name}}, ýóú ĥáṽé {{count}} úńŕéáḋ ṁéśśáġéś············].

Nur übersetzbarer Text ändert sich. Platzhalter überleben in jeder Syntax, die die Format-Adapter kennen, und in einer ICU-Nachricht bleiben Argumentnamen, die Schlüsselwörter plural und select und die Zweig-Selektoren unverändert. Durch Pipes getrennte Pluralformen von vue-i18n werden einzeln umgewandelt: car | cars wird zu [ćáŕ··] | [ćáŕś··]. Die Transformation ist deterministisch, die Datei lässt sich also sauber diffen.

--mode bidi ersetzt die Akzente durch eine Rechts-nach-links-Überschreibung, so wie Android und Chromium ihre Pseudo-Locale ar-XB bauen. Ein Layout, das Links-nach-rechts-Text voraussetzt, fällt so auf, bevor es irgendeine Rechts-nach-links-Übersetzung gibt.

SchrittWas du siehst
Überschreibenjedes Wort steht zwischen Rechts-nach-links-Marke und -Überschreibung (U+200F U+202E davor, U+202C U+200F danach), Save erscheint also als evaS
BehaltenPlatzhalter, ICU-Syntax, Markup, Ziffern und Satzzeichen bleiben außerhalb der Überschreibung und laufen von links nach rechts, wie in echtem Rechts-nach-links-Text

Nichts bekommt Akzente, wird länger oder steht in Klammern: Die Breite testet der Standardmodus. Die Datei behält die Buchstaben in ihrer gespeicherten Reihenfolge, und jeder Wert besteht dasselbe Integritäts-Gate, Platzhalter und Plural-Zweige bleiben also Byte für Byte gleich.

Standard ist die Pseudo-Locale ar-XB, die Intl.Locale und die meisten i18n-Bibliotheken als rechts nach links auflösen, eine App, die dir aus der Locale ableitet, dreht also von selbst um. ar-XB folgt den arabischen Pluralregeln (zero, one, two, few, many, other). ICU-Nachrichten, Android-<plurals>, gettext, Apple-Kataloge und vue-i18n-Pipes lösen eine Anzahl gegen die Formen auf, die die Datei schon hat. i18next-json hält jede Form unter einem eigenen _one- oder _other-Key, deshalb bekommt die Datei zusätzlich jede Kategorie, die der Quelle fehlt (_zero, _two, _few, _many und Ordinalformen ebenso), gefüllt aus der other-Form der Quelle, und keine Anzahl fällt auf deine Fallback-Sprache zurück. Mit --locale en-XB behältst du die englischen Pluralregeln und setzt dir="rtl" selbst.

Ein Sanitizer, der Unicode-Formatzeichen entfernt, nimmt die Überschreibung mit, und der String läuft wieder von links nach rechts. Editoren und Code-Scanner, die vor versteckten bidirektionalen Zeichen warnen, markieren die Datei, ein Grund mehr, dass sie unter .verbatra-local bleibt.

Nichts Kaputtes landet je in der Datei

Jeder erzeugte Wert besteht dasselbe Integritäts-Gate wie die Übersetzung eines Providers: dieselben Platzhalter wie die Quelle, gültige Nachrichtensyntax, nicht entartet, nicht leer. Ein Wert, der durchfallen würde, wird unverändert aus der Quelle kopiert und unter copied verbatim genannt; das ist ein Hinweis, kein Fehler.

Wohin die Ausgabe geht

Die Pseudo-Locale landet außerhalb deiner echten Locale-Dateien, standardmäßig unter .verbatra-local/pseudo, das verbatra init in .gitignore einträgt (pseudo ergänzt den Eintrag, falls er fehlt). Dein files.pattern wird in diesem Verzeichnis aufgelöst, mit locales/{locale}.json schreibt der Standardlauf also .verbatra-local/pseudo/locales/en-XA.json. Richte deinen Dev-Server darauf aus, oder schreib mit --out dorthin, wo dein Build schon ausliefert.

PSEUDO_OUTPUT_CONFLICT lehnt ab, bevor irgendetwas gelesen oder geschrieben wird:

  • eine Pseudo-Locale, die deine Quell-Locale oder eine Ziel-Locale benennt,
  • ein --out, das die Datei in dasselbe Verzeichnis wie eine konfigurierte Locale-Datei legt,
  • ein --out, das absolut ist, aus der Projektwurzel herausführt oder nach dem Auflösen symbolischer Links außerhalb des Projekts, in seiner Wurzel oder auf einer Datei landet, von der das Projekt abhängt.

Weil die Datei außerhalb von files.pattern liegt, gibt translate nie Geld für sie aus, und check und diff melden sie nie.

Formate, die durch Patchen einer vorhandenen Datei geschrieben werden

Die Writer für xliff und apple-xcstrings patchen Einheiten, die schon im Zieldokument stehen. Deshalb wird die Pseudo-Locale-Datei bei jedem Schreiben neu aus deiner Quelldatei kopiert, und ein später zur Quelle hinzugefügter Key kommt trotzdem an. Bei einer kopierten XLIFF-Datei wird target-language auf die Pseudo-Locale umgeschrieben.

JSON-Ausgabe

Schema: pseudo-envelope.json validiert den ganzen Envelope; Schemas listet die übrigen auf.

Mit --json trägt der JSON-Envelope locale, mode (accented oder bidi), path, entries (geschriebene Einträge, samt der im Bidi-Modus ergänzten Pluralformen), transformed (Werte, die sich von der Quelle unterscheiden), copied (unverändert kopierte Keys) und written (false, wenn die Datei schon aktuell war).

Rückmeldung im Terminal

Das Ergebnis geht auf stdout; die Fortschrittszeile und der nächste Schritt gehen auf stderr:

Ausgabe
verbatra: pseudolocalizing the source... done (0.1s)
verbatra pseudo
  en-XA (accented): 118 of 120 entries pseudolocalized
    copied verbatim: legal.disclaimer, brand.name
  wrote .verbatra-local/pseudo/locales/en-XA.json
next: load .verbatra-local/pseudo/locales/en-XA.json as the en-XA locale in your dev server

Ein zweiter Lauf über eine unveränderte Quelle meldet unchanged statt wrote. --quiet unterdrückt die stderr-Zeilen. Siehe Terminalausgabe.

Exit-Codes

CodeBedeutung
0die Pseudo-Locale wurde erzeugt, ob sich die Datei geändert hat oder nicht; unverändert kopierte Werte ändern daran nichts
2konnte nicht laufen: ein Bedienfehler, ein Config- oder Quellproblem oder eine abgelehnte Pseudo-Locale oder ein abgelehnter Ausgabepfad

Siehe den Exit-Code-Vertrag.

Siehe auch

Auf GitHub bearbeiten

Auf dieser Seite