Welche Teile können bei der JSON-Lokalisierung übersetzt werden und welche dürfen nicht geändert werden?
Die Schaltflächen auf der Seite sind ins Englische übersetzt, aber das Programm kann das Konfigurationselement nicht finden. Diese Art von Fehler tritt häufig bei der JSON-Lokalisierung auf: Jede Zeichenfolge im Objekt wird an den Übersetzer übergeben, und auch der Schlüsselname, das Routing und die Geschäftskodierung werden gemeinsam geändert. Ein sichererer Ansatz besteht darin, nicht zu erraten, welche Saiten wie menschliche Sprache klingen, sondern die Übersetzung welcher Pfade explizit zuzulassen.
Ein häufiger Fehler bei der JSON-Lokalisierung ist: Die Seitenschaltflächen wurden auf Englisch geändert, aber das Programm kann die entsprechenden Konfigurationselemente nicht finden. Der Grund dafür ist normalerweise, dass jede Zeichenfolge im Objekt zur Verarbeitung an den Übersetzer übergeben wird und sich auch der Schlüsselname, das Routing und die Geschäftscodierung entsprechend ändern. Dieser Artikel richtet sich an Entwickler und Lokalisierungspersonal, die für die internationale Konfiguration verantwortlich sind. Es erklärt, wie man zunächst übersetzbare Feldpfade abgrenzt und dann die Akzeptanz durchführt.
Die Beispiele verwenden synthetische Beispiele, um Verarbeitungsmethoden zu demonstrieren, 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 Grenzen und Akzeptanzpunkte im Text.
Was kann während der JSON-Lokalisierung übersetzt werden? Fazit in einem Satz
Es werden nur die vorab aufgeführten Copywriting-Pfade übersetzt. Schlüsselnamen, Routing-Werte und Geschäftscodes bleiben gleich und es wird eine Abnahme-Checkliste verwendet, um zu bestätigen, dass die unveränderten Teile tatsächlich nicht geändert wurden.
| Ihre Situation | Empfohlene Praktiken | Grund |
|---|---|---|
Schnittstellentexte wie buttons.save | Fügen Sie es in die Liste der zulässigen Pfade ein und bestätigen Sie es vor der Übersetzung. | Der Pfad ist eine eindeutige Adresse, die zuverlässiger ist als die Vermutung, ob die Zeichenfolge der menschlichen Sprache ähnelt. |
| Routing-Wert, Servicecode | Lassen Sie es so wie es ist und geben Sie keinen Übersetzungsbereich ein | Das Programm stützt sich auf diese Werte. Nach der Änderung tritt das Problem auf, dass das Konfigurationselement nicht gefunden werden kann. |
| Platzhalter, HTML-Snippets, URLs in Kopierfeldern | Fügen Sie Schutzregeln der nächsten Ebene hinzu | Felder innerhalb des zulässigen Pfads enthalten möglicherweise weiterhin Inhalte, die geschützt werden müssen |
| Array-Elemente | Verwenden Sie die ID-Zuordnung, wenn eine stabile ID vorhanden ist | Nachdem die Elemente neu angeordnet wurden, verweist der Index möglicherweise auf eine andere Kopie |
| Der Pfad verschwindet, nachdem die Quelldatei aktualisiert wurde | Melden Sie einen Fehler und aktualisieren Sie die Quellversion, ohne die alte Übersetzung automatisch zurückzuschreiben. | Ähnliche Feldnamen können dazu führen, dass die Übersetzung an der falschen Position geschrieben wird |
Beginnen Sie mit dem Feldpfad, anstatt alle Zeichenfolgen zu durchlaufen
buttons.save als Adresse zu behandeln ist zuverlässiger, als die Zeichenfolge „save"zu ersetzen, wenn Sie sie sehen. Derselbe Satz kann gleichzeitig in Schnittstellenkopien, Protokollbeispielen und Testfällen vorkommen und eine Übersetzung ist möglicherweise nicht an allen drei Stellen erforderlich.
Pfade sollten mithilfe von Tupeln oder JSON-Zeigern eindeutig dargestellt werden. Beim einfachen Zusammenfügen mit Punkten kommt es zu Mehrdeutigkeiten, wenn der Schlüsselname selbst Punkte enthält.
Das folgende Beispiel schränkt nur zwei bestimmte Pfade ein und lässt andere Inhalte unverändert. Dies ist eine Lokalisierungsstrategie für diesen Artikel und keine Anforderung des JSON-Formats selbst. Das synthetische Beispiel enthält sowohl Schnittstellentext als auch einen Routing-Wert, der nicht geändert werden darf, um die Grenzprüfung zu erleichtern.
Ändern Sie jeweils nur explizit zulässige Werte
import copy
source = {"buttons": {"save": "保存", "cancel": "取消"},
"route": "/settings", "version": 1}
approved = {("buttons", "save"): "Save",
("buttons", "cancel"): "Cancel"}
def apply_texts(document, replacements):
result = copy.deepcopy(document)
for path, translated in replacements.items():
if not path or not isinstance(translated, str):
raise ValueError("invalid replacement")
parent = result
for key in path[:-1]:
parent = parent[key]
key = path[-1]
if key not in parent or not isinstance(parent[key], str):
raise ValueError("target must be an existing string")
parent[key] = translated
return result
result = apply_texts(source, approved)
assert result["buttons"]["save"] == "Save"
assert result["route"] == source["route"]
assert source["buttons"]["save"] == "保存"
try:
apply_texts(source, {("version",): "one"})
except ValueError:
pass
else:
raise AssertionError("numeric field must be rejected")
Das Beispiel veranschaulicht nur die Objektebene, implementiert keine Array-Indizierung und ruft den Übersetzungsdienst nicht auf. Bei der Übermittlung an die reale Pipeline sollte die Liste der zulässigen Pfade vor der Übersetzung festgelegt werden, und es darf nicht zugelassen werden, dass die Partei, die die Übersetzung erstellt, gleichzeitig den Umfang ihrer eigenen Änderungen erweitert.
Deep Copy kann verhindern, dass Eingabeobjekte an Ort und Stelle geändert werden, es handelt sich jedoch nicht um ein Transaktionssystem. Persistenz muss noch separat entworfen werden.
Die Akzeptanz hängt von den unveränderten Teilen ab
| prüfen | normales Ergebnis | Aktionen im Ausnahmefall |
|---|---|---|
| Sammlung von Schlüsselnamen | stimmt mit der Quelldatei überein | Verhindern Sie das Überschreiben der Originaldatei |
| Unautorisierter Pfad | Der Wert bleibt unverändert | Finden Sie Modifikationen, die außerhalb der Grenzen liegen |
| Zielfeldtyp | Immer noch eine Saite | Lehnen Sie implizite Typkonvertierungen ab |
| fehlender Pfad | Melden Sie einen Fehler klar und deutlich | Aktualisieren Sie die Quellversion, ohne automatisch Felder zu erstellen |
Es reicht nicht aus, nur zu überprüfen, ob „die Zielsprache vorhanden ist". Eine Liste der Quelldatei-Hashes und -Pfade sollte ebenfalls gespeichert werden. Wenn der Pfad nach der Aktualisierung der Quelldatei gelöscht wird, kann die alte Übersetzung nicht automatisch mit ähnlichen Feldnamen zurückgeschrieben werden.
Arrays, Nullwerte und doppelte Schlüssel müssen separat betrachtet werden
- Array: Nachdem die Elemente neu angeordnet wurden, verweist der Index möglicherweise immer noch nicht auf die Originalkopie. Wenn eine stabile ID vorhanden ist, wird die ID zuerst für die Zuordnung verwendet.
- Null:
nullist keine leere Zeichenfolge und sollte aus Gründen der Übersetzungsfreundlichkeit nicht durch das Literal „empty"ersetzt werden. - Doppelter Schlüssel: Informationen zu doppelten Schlüsseln sind möglicherweise verloren gegangen, nachdem die normale JSON-Analyse abgeschlossen ist. Wenn Sie doppelte Schlüssel ablehnen möchten, sollten Sie diese während der Analysephase behandeln, anstatt auf den Abschluss der Übersetzung zu warten. Referenz Python-JSON-Dokumentation.
Dieses Beispiel eignet sich für eine gut strukturierte Konfigurationslokalisierung und nicht für einen beliebigen JSON-Autoübersetzer. Wenn Sie eine Übersetzung annehmen, vergewissern Sie sich zunächst, dass sich die Struktur und die geschützten Felder nicht geändert haben, und besprechen Sie dann, ob die Sprache natürlich ist. Die Fehlerbehebungsreihenfolge wird klarer.
📊 Kernvergleich
| Weg | üben | Hauptrisiken | Anwendbare Szenarien |
|---|---|---|---|
| Durchlaufen Sie alle Zeichenfolgen | Jede Zeichenfolge wird dem Übersetzer übergeben | Schlüsselnamen, Routing- und Geschäftscodes können gemeinsam geändert werden | Im Originalartikel nicht behandelt |
| Whitelist nach Feldpfad | Übersetzen Sie nur die vorab angegebenen Pfade | Die Pfadliste muss gepflegt werden | Gut strukturierte Konfigurationslokalisierung |
🎯 Welche Methode ist für Dich geeignet?
wenn du……
- Um die Schnittstellenkonfigurationsdatei beizubehalten, wenn Sie möchten, dass die Schaltflächenkopie übersetzbar ist und die Programmkonfiguration unverändert bleibt, verwenden Sie bitte das Feld Pfad-Whitelist und bestimmen Sie die Pfadliste vor der Übersetzung.
- Array-Elemente können neu angeordnet werden. Bitte geben Sie der Verwendung stabiler IDs für die Zuordnung Vorrang, anstatt sich auf Indizes zu verlassen.
- Die Quelldatei wird kontinuierlich aktualisiert. Bitte speichern Sie den Quelldatei-Hash und die Pfadliste. Wenn der Pfad verschwindet, tritt ein Fehler auf und die alte Übersetzung wird nicht automatisch zurückgeschrieben.
- Wenn Sie die Lieferung echter Dokumente verarbeiten müssen, erstellen Sie bitte eine Überprüfungsliste der zulässigen Pfade, des Originaltexts und der Übersetzung und überprüfen Sie diese einzeln.
❓ Häufig gestellte Fragen (FAQ)
1. Warum nicht alle Strings direkt in JSON übersetzen?
Denn dieselbe Zeichenfolge kann gleichzeitig eine Schnittstellenkopie, ein Programmschlüsselname oder ein Geschäftscode sein. Wenn jede Zeichenfolge an den Übersetzer übergeben wird, können auch der Schlüsselname, das Routing und die Geschäftscodierung gemeinsam geändert werden, was dazu führt, dass das Programm das Konfigurationselement nicht findet.
2. Welche Probleme gibt es bei der Verwendung von Punkten zum Verbinden von Pfaden?
Wenn der Schlüsselname selbst einen Punkt enthält, führt die Verkettung von Punkten zu Mehrdeutigkeiten. Der Originalartikel empfiehlt die Verwendung eindeutiger Darstellungen wie Tupel oder JSON-Zeiger.
3. Reicht es, nur zu prüfen, ob die Zielsprache in der Übersetzung enthalten ist?
nicht genug. Sie sollten außerdem prüfen, ob der Satz von Schlüsselnamen mit der Quelldatei übereinstimmt, ob der Wert des nicht autorisierten Pfads unverändert bleibt, ob das Zielfeld immer noch eine Zeichenfolge ist und ob fehlende Pfade explizit als Fehler gemeldet werden.
4. Kann null durch den Text „leer"ersetzt werden?
Kippen.null ist keine leere Zeichenfolge und sollte aus Gründen der Übersetzungsfreundlichkeit nicht durch Text ersetzt werden.
5. Was sollte für die Zuordnung beim Übersetzen von Arrays verwendet werden?
Wenn eine stabile ID vorhanden ist, wird die ID zuerst für die Zuordnung verwendet. Wenn Sie sich nur auf den Index verlassen, kann es sein, dass nach der Neuanordnung der Elemente der falschen Kopie zugeordnet wird.
📝 Zusammenfassung
Bevor Sie die JSON-Konfiguration übersetzen, klären Sie zunächst die Pfade, die eine Übersetzung ermöglichen, und überprüfen Sie dann mithilfe der Akzeptanzcheckliste die unveränderten Teile. Dies erleichtert die Lokalisierung des Problems, wenn etwas schief geht.


