Które części można przetłumaczyć podczas lokalizacji JSON, a których nie wolno zmieniać?

Przyciski na stronie są przetłumaczone na język angielski, ale program nie może znaleźć elementu konfiguracji. Tego rodzaju awaria często występuje w lokalizacji JSON: każdy ciąg znaków w obiekcie jest przekazywany tłumaczowi, a nazwa klucza, routing i kodowanie biznesowe również ulegają jednoczesnej zmianie. Bezpieczniejszym podejściem nie jest zgadywanie, które ciągi brzmią jak mowa ludzka, ale wyraźne zezwolenie na tłumaczenie których ścieżek.

Częstym błędem w lokalizacji JSON jest: przyciski strony zostały zmienione na angielskie, ale program nie może znaleźć odpowiednich elementów konfiguracji. Powodem jest zwykle to, że każdy ciąg znaków w obiekcie jest przekazywany tłumaczowi do przetworzenia, a nazwa klucza, routing i kodowanie biznesowe również się zmieniają. Ten artykuł jest napisany dla programistów i personelu lokalizacyjnego odpowiedzialnego za konfigurację międzynarodową. Wyjaśnia, jak najpierw wyznaczyć możliwe do przetłumaczenia ścieżki pola, a następnie dokonać akceptacji.

W przykładach wykorzystano próbki syntetyczne w celu zademonstrowania metod przetwarzania, a kod został sprawdzony w izolowanym środowisku, ale nie stanowi to gwarancji działania wszystkich rzeczywistych plików lub produktu. Przed przystąpieniem do przetwarzania ważnych dokumentów prosimy o zachowanie oryginałów i zapoznanie się z nimi zgodnie z granicami i pozycjami akceptacji w tekście.

Co można przetłumaczyć podczas lokalizacji JSON? Wniosek w jednym zdaniu

Przetłumaczone zostaną wyłącznie wymienione wcześniej ścieżki copywritingu. Nazwy kluczy, wartości tras i kody biznesowe pozostaną takie same, a lista kontrolna akceptacji zostanie wykorzystana w celu potwierdzenia, że niezmienione części rzeczywiście nie zostały zmienione.

twoja sytuacjaZalecane praktykipowód
Copywriting interfejsu, taki jak buttons.saveUmieść go na liście dozwolonych ścieżek i potwierdź przed tłumaczeniem.Ścieżka jest wyraźnym adresem, co jest bardziej niezawodne niż zgadywanie, czy ciąg znaków przypomina ludzką mowę.
Wartość routingu, kod serwisowyZostaw to tak jak jest i nie wchodź w zakres tłumaczeniaProgram opiera się na tych wartościach. Po modyfikacji wystąpi problem polegający na tym, że nie można znaleźć elementu konfiguracji.
Elementy zastępcze, fragmenty HTML, adresy URL w polach kopiowaniaDodaj reguły ochrony wyższego poziomuPola w dozwolonej ścieżce mogą nadal zawierać treść wymagającą ochrony
elementy tablicyUżyj mapowania identyfikatora, jeśli istnieje stabilny identyfikatorPo uporządkowaniu elementów indeks może wskazywać na inny fragment egzemplarza
Ścieżka zniknie po zaktualizowaniu pliku źródłowegoZgłoś błąd i zaktualizuj wersję źródłową bez automatycznego zapisywania starego tłumaczenia.Podobne nazwy pól mogą spowodować, że tłumaczenie zostanie zapisane w niewłaściwej pozycji

Zacznij od ścieżki pola zamiast przechodzić przez wszystkie ciągi znaków

Traktowanie buttons.save jako adresu jest bardziej niezawodne niż zastępowanie ciągu „zapisz", gdy go zobaczysz. To samo zdanie może pojawić się jednocześnie w kopii interfejsu, przykładach dziennika i przypadkach testowych, a tłumaczenie może nie być wymagane we wszystkich trzech miejscach.

Ścieżki powinny być reprezentowane jednoznacznie za pomocą krotek lub wskaźników JSON. Podczas prostego łączenia kropkami niejednoznaczność wystąpi, jeśli sama nazwa klucza zawiera kropki.

Poniższy przykład ogranicza tylko dwie określone ścieżki, pozostawiając inną zawartość bez zmian. Jest to strategia lokalizacji dla tego artykułu, a nie wymóg samego formatu JSON. Próbka syntetyczna zawiera zarówno tekst interfejsu, jak i wartość routingu, której nie można zmieniać, aby ułatwić sprawdzanie granic.

Jednorazowo zmieniaj tylko jawnie dozwolone wartości

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")

Przykład pokazuje jedynie poziom obiektowy, nie implementuje indeksowania tablic i nie wywołuje usługi tłumaczenia. Przesyłając do prawdziwego potoku, przed tłumaczeniem należy ustalić listę dozwolonych ścieżek, a podmiot generujący tłumaczenie nie może jednocześnie rozszerzać zakresu własnych modyfikacji.

Głęboka kopia może uniemożliwić lokalną modyfikację obiektów wejściowych, ale nie jest to system transakcyjny. Trwałość nadal należy projektować osobno.

Akceptacja zależy od niezmienionych części

zbadaćnormalny wynikDziałania w przypadku wyjątku
Kolekcja nazw kluczyzgodny z plikiem źródłowymZapobiegaj nadpisywaniu oryginalnego pliku
Nieautoryzowana ścieżkawartość pozostaje niezmienionaZnajdź modyfikacje wykraczające poza zakres
Typ pola docelowegoWciąż sznurekOdrzuć niejawne konwersje typów
brakująca ścieżkaZgłoś błąd w jasny sposóbZaktualizuj wersję źródłową bez automatycznego tworzenia pól

Samo sprawdzenie, czy „język docelowy jest obecny", nie wystarczy. Należy również zapisać listę skrótów i ścieżek plików źródłowych. Jeśli ścieżka zostanie usunięta po aktualizacji pliku źródłowego, stare tłumaczenie nie będzie mogło zostać automatycznie zapisane z podobnymi nazwami pól.

Tablice, wartości null i zduplikowane klucze należy rozpatrywać osobno

  • Tablica: Po zmianie układu elementów indeks może nadal nie wskazywać oryginalnej kopii. Jeśli istnieje stabilny identyfikator, identyfikator jest używany w pierwszej kolejności do mapowania.
  • Null:null nie jest pustym ciągiem znaków i nie należy go zastępować dosłownym „pustym"dla wygody tłumaczenia.
  • Duplikat klucza: Zduplikowane informacje o kluczu mogły zostać utracone po zakończeniu normalnego analizowania JSON. Jeśli chcesz odrzucić zduplikowane klucze, powinieneś zająć się nimi na etapie analizowania, zamiast czekać na zakończenie tłumaczenia. Odniesienie Dokumentacja Pythona JSON.

Ten przykład jest odpowiedni dla dobrze zorganizowanej lokalizacji konfiguracji, a nie dla dowolnego automatycznego tłumacza JSON. Akceptując tłumaczenie, najpierw sprawdź, czy struktura i chronione pola nie uległy zmianie, a następnie omów, czy język jest naturalny. Sekwencja rozwiązywania problemów będzie jaśniejsza.

📊 Porównanie rdzeni

SposóbpraktykaGłówne zagrożeniaObowiązujące scenariusze
Iteruj po wszystkich ciągachKażdy ciąg jest przekazywany tłumaczowiNazwy kluczy, kody routingu i firmy mogą być zmieniane razemNie ujęte w oryginalnym artykule
Biała lista według ścieżki polaTłumacz tylko wcześniej określone ścieżkiNależy zachować listę ścieżekDobrze zorganizowana lokalizacja konfiguracji

🎯 Która metoda jest dla Ciebie odpowiednia?

jeśli…

  • Aby zachować plik konfiguracyjny interfejsu, jeśli chcesz, aby kopia przycisku była możliwa do przetłumaczenia, a konfiguracja programu pozostała niezmieniona, skorzystaj z białej listy ścieżek pola i określ listę ścieżek przed tłumaczeniem.
  • Elementy tablicy mogą być przestawiane, proszę dać pierwszeństwo używaniu stabilnych identyfikatorów do mapowania zamiast polegania na indeksach.
  • Plik źródłowy będzie stale aktualizowany. Zapisz skrót i listę ścieżek pliku źródłowego. Jeśli ścieżka zniknie, wystąpi błąd, a stare tłumaczenie nie zostanie automatycznie zapisane.
  • Jeśli chcesz przetworzyć dostawę prawdziwych dokumentów, sporządź listę dozwolonych ścieżek, tekstu oryginalnego i tłumaczenia i przejrzyj je jeden po drugim.

❓ Często zadawane pytania (FAQ)

1. Dlaczego nie przetłumaczyć bezpośrednio wszystkich ciągów znaków w formacie JSON?

Ponieważ ten sam ciąg znaków może być jednocześnie kopią interfejsu, nazwą klucza programu lub kodem biznesowym. Kiedy każdy ciąg znaków jest przekazywany tłumaczowi, nazwa klucza, routing i kodowanie biznesowe mogą również zostać zmienione razem, powodując, że program nie znajdzie elementu konfiguracji.

2. Jakie są problemy przy używaniu kropek do łączenia ścieżek?

Jeśli sama nazwa klucza zawiera kropkę, łączenie kropek spowoduje niejednoznaczność. Oryginalny artykuł zaleca stosowanie jednoznacznych reprezentacji, takich jak krotki lub wskaźniki JSON.

3. Czy wystarczy sprawdzić, czy w tłumaczeniu jest uwzględniony język docelowy?

nie wystarczy. Należy także sprawdzić, czy zestaw nazw kluczy jest zgodny z plikiem źródłowym, czy wartość nieautoryzowanej ścieżki pozostaje niezmieniona, czy pole docelowe jest nadal ciągiem znaków i czy brakujące ścieżki są jawnie zgłaszane jako błędy.

4. Czy null można zastąpić tekstem „pusty"?

Żargon.null nie jest pustym ciągiem znaków i nie należy go zastępować tekstem dla wygody tłumaczenia.

5. Czego należy używać do mapowania podczas translacji tablic?

Jeśli istnieje stabilny identyfikator, identyfikator jest używany w pierwszej kolejności do mapowania. Opierając się wyłącznie na indeksie, po przestawieniu elementów można znaleźć błędną kopię.

📝 Podsumowanie

Przed tłumaczeniem konfiguracji JSON najpierw wyjaśnij ścieżki umożliwiające tłumaczenie, a następnie skorzystaj z listy kontrolnej akceptacji, aby sprawdzić niezmienione części. Ułatwia to zlokalizowanie problemu, gdy coś pójdzie nie tak.

Wypróbuj teraz: prześlij dokument, aby rozpocząć tłumaczenie, zachowując oryginalny układ

Zaktualizowano 2026-11-14