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 sytuacja | Zalecane praktyki | powód |
|---|---|---|
Copywriting interfejsu, taki jak buttons.save | Umieść 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 serwisowy | Zostaw to tak jak jest i nie wchodź w zakres tłumaczenia | Program 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 kopiowania | Dodaj reguły ochrony wyższego poziomu | Pola w dozwolonej ścieżce mogą nadal zawierać treść wymagającą ochrony |
| elementy tablicy | Użyj mapowania identyfikatora, jeśli istnieje stabilny identyfikator | Po uporządkowaniu elementów indeks może wskazywać na inny fragment egzemplarza |
| Ścieżka zniknie po zaktualizowaniu pliku źródłowego | Zgł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 wynik | Działania w przypadku wyjątku |
|---|---|---|
| Kolekcja nazw kluczy | zgodny z plikiem źródłowym | Zapobiegaj nadpisywaniu oryginalnego pliku |
| Nieautoryzowana ścieżka | wartość pozostaje niezmieniona | Znajdź modyfikacje wykraczające poza zakres |
| Typ pola docelowego | Wciąż sznurek | Odrzuć niejawne konwersje typów |
| brakująca ścieżka | Zgłoś błąd w jasny sposób | Zaktualizuj 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:
nullnie 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ób | praktyka | Główne zagrożenia | Obowiązujące scenariusze |
|---|---|---|---|
| Iteruj po wszystkich ciągach | Każdy ciąg jest przekazywany tłumaczowi | Nazwy kluczy, kody routingu i firmy mogą być zmieniane razem | Nie ujęte w oryginalnym artykule |
| Biała lista według ścieżki pola | Tłumacz tylko wcześniej określone ścieżki | Należy zachować listę ścieżek | Dobrze 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


