{name} in der Übersetzungskopie ist verloren. So stoppen Sie es, bevor Sie online gehen
Wenn {name} in der Übersetzungskopie verloren geht, treten online Fehler auf. Regelmäßige Urteile sind unzuverlässig. In diesem Artikel wird die Python-Standardbibliothek string.Formatter.parse verwendet, um die Verifizierungsplatzhalter mit korrekten und falschen Synthesebeispielen, direkt ausführbaren Skripten und manuellen Überprüfungsgrenzen zu strukturieren.
– {{name}} ist ein maskiertes Anzeigeliteral, keine Variable und sollte nicht im Platzhaltervertrag gezählt werden.
- Formatangaben gelten als geschützte Inhalte. Das Ändern der Dezimalstelle (z. B. .2f in .0f) wird markiert und muss gemäß der Lokalisierungsvereinbarung bestätigt werden.
– Der Parsing-Code ruft weder das Format auf, noch handelt es sich um eine vorlagensichere Sandbox. Felder und Ausgabe-Escape müssen beim Rendern weiterhin eingeschränkt werden.
In der übersetzten Kopie werden Variablen wie {name} oft zusammen übersetzt, und die Seite meldet oft keinen Fehler, bis der Wert tatsächlich ausgefüllt wird. Wenn Sie sich nur auf das menschliche Auge oder reguläre Ausdrücke verlassen, um die geschweiften Klammern zu überprüfen, bevor Sie online gehen, kann es leicht passieren, dass sie übersehen werden. Dieser Artikel richtet sich an Entwickler und Redakteure, die für Lokalisierung, Vorlagen und Auslieferungsprüfungen verantwortlich sind. Es stellt vor, wie Sie die Python-Standardbibliothek string.Formatter.parse verwenden, um eine strukturierte Überprüfung von Platzhaltern durchzuführen, und erklärt, welche Situationen noch eine manuelle Überprüfung erfordern.
Nach dem Lesen können Sie eine Verifizierungsidee erhalten, die direkt ausgeführt werden kann: Überprüfen Sie die Feldidentität, die Häufigkeit des Vorkommens und die Formatspezifikationen, wenn die Übersetzung geliefert wird, anstatt zu warten, bis das Problem online entdeckt wird. In den Beispielen werden synthetische Beispiele verwendet und der Code wurde in einer isolierten Umgebung überprüft. Dies stellt jedoch keine Garantie für alle echten Dateien oder die Produktleistung dar. Bevor Sie wichtige Dokumente bearbeiten, bewahren Sie bitte die Originale auf und überprüfen Sie sie anhand der unten aufgeführten Grenzen und Annahmepunkte.
Platzhalter nach der Übersetzung verloren? Fazit in einem Satz
Extrahieren Sie zunächst mithilfe der strukturierten Analyse die Felder in der Formatzeichenfolge und vergleichen Sie sie dann einzeln mit den Feldern der Quellkopie. Wenn die Feldnamen, Auftrittszeiten oder Formatspezifikationen inkonsistent sind, wird dies direkt abgelehnt und die Anpassung der Wortreihenfolge wird einer manuellen Überprüfung überlassen.
| Ihre Situation | Empfohlene Praktiken | Grund |
|---|---|---|
| Die Variablennamen in der Übersetzung werden übersetzt | Stellen Sie den Schnittstellenfeldnamen vor der Auslieferung wieder her | Der Variablenname gehört zum Schnittstellenvertrag. Nach der Änderung wird beim Ausfüllen des Werts auf der Seite ein Fehler gemeldet. |
| In der Übersetzung fehlt einmal ein Feld mit demselben Namen | Lehnen Sie den Artikel ab und prüfen Sie, ob die Übersetzung fehlt | Auch die Häufigkeit des Vorkommens desselben Feldes ist Vertragsbestandteil |
| Lediglich die Feldposition wurde angepasst | Akzeptieren Sie, ob die Reihenfolge der Lesewörter natürlich ist | Änderungen in der Feldreihenfolge haben normalerweise keinen Einfluss auf die Ergebnisse der Eingabe von Werten |
| Formatangaben wie Dezimalstellen haben sich geändert | Die Markierung ist inkonsistent. Bitte anhand des Lokalisierungsprotokolls bestätigen | Formatvorgaben sind ebenfalls geschützt und ob Änderungen zulässig sind, muss im Einvernehmen entschieden werden. |
Wählen Sie zuerst die Formatsyntax aus
Dieser Artikel befasst sich nur mit Platzhaltern im Python-str.format-Stil und behandelt nicht JavaScript-Vorlagenzeichenfolgen, ICU MessageFormat oder andere Platzhaltersysteme. Verschiedene Systeme haben sehr unterschiedliche Verschachtelungs-, Escape- und Pluralisierungsregeln, und ein regulärer Ausdruck kann nicht behaupten, sie alle zu unterstützen. Das Beispiel erfordert die Verwendung benannter Felder und lehnt automatisch nummerierte Felder (z. B. {}) ab.
Eine vollständige Beschreibung der Feldsyntax finden Sie in Python-String- und Formatter-Dokumentation.
Geschweifte Klammern mit Escapezeichen sind keine Variablen
{{name}} stellt den Anzeigetext {name} dar und sollte nicht als Feld gezählt werden. In der Formatspezifikation können auch verschachtelte Felder vorhanden sein, z. B. {value:{width}}. Der folgende Code liest die Spezifikation rekursiv und zählt die wiederholten Vorkommen desselben Felds.
from string import Formatter
from collections import Counter
def contract(text, depth=0):
if depth > 5:
raise ValueError("nested format budget")
result = Counter()
for literal, field, spec, conversion in Formatter().parse(text):
if field is None:
continue
if not field or field != field.strip():
raise ValueError("named field without surrounding whitespace required")
result[(field, conversion, spec)] += 1
if spec:
result.update(contract(spec, depth + 1))
return result
assert contract("Hi {name}, total {amount:.2f}") == contract("{name}:金额 {amount:.2f}")
assert contract("{{name}}") == Counter()
assert contract("{name} {name}") != contract("{name}")
assert contract("{value:{width}}")[("width", None, "")] == 1
assert contract("{amount:.2f}") != contract("{amount:.0f}")
for bad in ["Hi {name", "{ name}", "{}"]:
try:
contract(bad)
except ValueError:
pass
else:
raise AssertionError("invalid template accepted")
Dieser Vertrag ist bewusst streng
Auch hier gelten die Formatangaben als geschützter Inhalt, daher wird eine Änderung der Anzahl der Nachkommastellen gekennzeichnet. Einige Lokalisierungsaufgaben erfordern eine Änderung der Art und Weise, wie Zahlen dargestellt werden. In diesem Fall sollten Sie dafür eine separate Regel erstellen, anstatt alle Platzhalterprüfungen abzubrechen. Die Verschachtelungstiefenbegrenzung im Beispiel ist ein Demonstrationsbudget und keine Anforderung der Sprachspezifikation.
In der folgenden Tabelle sind einige gängige Arten von Änderungen und die entsprechenden Behandlungsmethoden aufgeführt:
| ändern | Das Ergebnis dieses Beispiels | Überprüfungsaktion |
|---|---|---|
| Felder ändern | akzeptieren | Ist die Wortreihenfolge beim Lesen natürlich? |
| Das gleiche Feld fehlt einmal | Vertrag ablehnen | Suchen Sie nach fehlenden Übersetzungen |
| Variablennamen werden übersetzt | Vertrag ablehnen | Feldname der Wiederherstellungsschnittstelle |
| Änderungen der Dezimalspezifikation | Tags sind inkonsistent | Bestätigen Sie gemäß der Lokalisierungsvereinbarung |
📊 Kernvergleich
| Typ ändern | Ob es die Verifizierung besteht | Folgemaßnahmen |
|---|---|---|
| Felder ändern | passieren | Ist die Wortreihenfolge beim Lesen natürlich? |
| Das gleiche Feld fehlt einmal | fehlgeschlagen | Suchen Sie nach fehlenden Übersetzungen |
| Variablennamen werden übersetzt | fehlgeschlagen | Feldname der Wiederherstellungsschnittstelle |
| Änderungen der Dezimalspezifikation | Als inkonsistent markieren | Bestätigen Sie gemäß der Lokalisierungsvereinbarung |
🎯 Welche Methode ist für Dich geeignet?
Wenn Sie für die Lieferung der Übersetzung verantwortlich sind
Führen Sie vor der Auslieferung eine Strukturprüfung durch und senden Sie abgelehnte Einträge mit fehlenden oder geänderten Feldnamen an den Übersetzer zurück.
Wenn Sie für Vorlagen und Schnittstellen verantwortlich sind
Machen Sie deutlich, welche Feldnamen zum Schnittstellenvertrag gehören und listen Sie diese in den Lieferanweisungen auf, um den Vergleich für Übersetzer und Prüfer zu erleichtern.
Wenn Sie die Art und Weise ändern müssen, wie Zahlen dargestellt werden
Entwickeln Sie ein Lokalisierungsprotokoll separat für die Formatspezifikationen und fügen Sie es den Verifizierungsregeln hinzu, anstatt die Gesamtprüfung auszuschalten.
❓ Häufig gestellte Fragen (FAQ)
1. Kann diese Methode JavaScript-Vorlagen oder ICU MessageFormat verarbeiten?
kann nicht. Dieser Artikel konzentriert sich nur auf benannte Felder im Python-str.format-Stil. Die Verschachtelungs-, Escape- und Pluralisierungsregeln anderer Systeme müssen separat verarbeitet werden.
2. Wird {{name}} als Variable geprüft?
Gewohnheit. Es stellt den Anzeigetext {name} dar, der beim Parsen nicht als Feld gezählt wird.
3. Wenn ich nur die Position des Feldes im Satz anpasse, wird es dann abgelehnt?
Gewohnheit. Änderungen der Feldpositionen werden in diesem Fall akzeptiert und dann manuell gelesen, um festzustellen, ob die Wortreihenfolge natürlich ist.
4. Kann ich format direkt anrufen, um die Übersetzung zu überprüfen?
Der Code in diesem Artikel führt nur eine Analyse durch und ruft nicht tatsächlich format auf, um das Objekt auszufüllen. Es handelt sich nicht um eine Sicherheits-Sandbox für Vorlagen. Das anschließende Rendern erfordert außerdem Einschränkungen hinsichtlich der verfügbaren Felder, des Objektzugriffs und des Ausgabekontexts, insbesondere Escape-Regeln in HTML-Seiten.
📝 Zusammenfassung
Durch die Verwendung von strukturiertem Parsing zur Prüfung von Platzhaltern während der Übersetzungsbereitstellung können Probleme mit Feldnamen, Zeiten und Formatspezifikationen vor der Online-Bereitstellung vermieden werden. Ob die Sprache fließend ist, muss noch gesondert vom Gutachter beurteilt werden.


