Jak tłumaczyć pliki .po bez psucia zmiennych kodu (%s, HTML)
Zaczyna się od prostego zadania: tłumaczysz swój motyw WordPress na język hiszpański. Przesyłasz plik .mo, odświeżasz stronę i...
Błąd krytyczny: Uncaught ArgumentCountError: Too few arguments to function sprintf()...
A może Twoja witryna się ładuje, ale układ jest zniszczony, ponieważ tag zamykający </div> został przetłumaczony na </ div>.
To największy strach każdego programisty pracującego z lokalizacją. Kiedy używasz ogólnych narzędzi tłumaczeniowych (takich jak Tłumacz Google lub podstawowe wrappery AI) na technicznych plikach .po, nie traktują one kodu inaczej niż tekstu. Próbują „przetłumaczyć” Twoje zmienne, a robiąc to, psują Twoją witrynę.
W tym przewodniku wyjaśnimy dokładnie, dlaczego tak się dzieje i jak zapewnić 100% bezpieczeństwo kodu w automatycznych tłumaczeniach.
Anatomia katastrofy: dlaczego %s psuje strony
WordPress używa systemu Gettext i funkcji PHP, takich jak sprintf(), do obsługi dynamicznego tekstu.
Na przykład możesz mieć taki ciąg:
msgid "Search results for %s"
%s to zmienna zastępcza, w której PHP wstawi zapytanie wyszukiwania użytkownika.
Jak ogólna AI to źle robi
Kiedy podajesz ten ciąg do standardowego dużego modelu językowego (LLM) lub interfejsu API tłumaczenia, widzi on %s jako kolejne dziwne słowo. Może próbować naprawić gramatykę lub interpunkcję wokół niego.
Oto najczęstsze błędy składniowe, które widzimy:
-
Dodana spacja:
- Oryginał:
Hello %s - Złe tłumaczenie:
Cześć % s - Wynik: PHP szuka
%s, ale widzi% s. Zmienna nie ładuje się, często powodując błąd krytyczny.
- Oryginał:
-
Halucynacja HTML:
- Oryginał:
Kliknij <strong>tutaj</strong>, aby się zalogować. - Złe tłumaczenie:
Kliknij <strong>tutaj</ strong>, aby się zalogować. - Wynik: AI dodało spację wewnątrz tagu zamykającego
</ strong>. Twój CSS się psuje, a reszta strony staje się pogrubiona.
- Oryginał:
-
Zamiana argumentów:
- Oryginał:
Strona %1$s z %2$s - Złe tłumaczenie:
Strona %2$s z %1$s - Wynik: AI uznało, że zdanie brzmi lepiej, jeśli liczby zostaną zamienione. Teraz Twoja paginacja mówi „Strona 10 z 1”.
- Oryginał:
Pułapka „Ręcznej naprawy”
Większość programistów próbuje rozwiązać ten problem, ręcznie przeglądając plik. Jeśli masz małą wtyczkę z 50 ciągami, to w porządku. Ale jeśli tłumaczysz sklep WooCommerce z 5000 ciągów?
Skanowanie 5000 wierszy kodu w poszukiwaniu jednego brakującego średnika lub dodatkowej spacji wewnątrz zmiennej %s jest niemożliwe. Zajmuje to godziny, a ludzkie oczy nieuchronnie coś przeoczą.
Skrypty Regex (wyrażenia regularne) mogą pomóc zweryfikować obecność, ale rzadko wykrywają problemy ze zmianą kolejności specyficzne dla kontekstu lub subtelne uszkodzenie atrybutów HTML.
Rozwiązanie: „Blokada składni”
Jedynym sposobem na bezpieczne przetłumaczenie pliku .po jest uniemożliwienie AI dotykania kodu w pierwszej kolejności. Wymaga to procesu zwanego Blokadą składni.
To jest podstawowa technologia stojąca za SimplePoTranslate.
W przeciwieństwie do ogólnych narzędzi, nie wrzucamy po prostu tekstu do AI. Najpierw analizujemy strukturę Gettext. Oto jak działa nasz „Tryb bezpieczny”:
- Analiza: Skanujemy Twój plik
.poi identyfikujemy każdą zmienną (%s,%d), każdy argument pozycyjny (%1$s) i każdy tag HTML (<br/>,<span>). - Ekstrakcja i blokowanie: Tymczasowo usuwamy te elementy z ciągu i zastępujemy je niezmiennymi tokenami.
- Wejście:
Cześć <strong>%s</strong> - Co widzi AI:
Cześć [TOKEN_1][TOKEN_2]
- Wejście:
- Tłumaczenie: AI tłumaczy tekst „Cześć” na „Hello”, ale fizycznie nie może zmienić
[TOKEN_1]ani[TOKEN_2], ponieważ są zablokowane. - Rekonstrukcja: Wstawiamy oryginalny kod z powrotem do przetłumaczonego ciągu dokładnie tam, gdzie powinien się znajdować.
Wynik: Zero zepsutych stron
Ponieważ AI nigdy nie wchodzi w interakcję z rzeczywistymi znakami %s lub HTML, matematycznie niemożliwe jest, aby silnik tłumaczenia dodał spację wewnątrz zmiennej lub uszkodził tag.
Obsługujemy nawet złożone reguły liczby mnogiej (msgid_plural) dla języków takich jak rosyjski czy polski, zapewniając użycie odpowiedniej zmiennej dla odpowiedniej liczby.
Przestań grać w hazard ze swoim kodem
Nie powinieneś musieć trzymać kciuków za każdym razem, gdy przesyłasz plik językowy. Lokalizacja powinna polegać na docieraniu do nowych klientów, a nie na debugowaniu błędów PHP.
SimplePoTranslate to najbezpieczniejsze, najbardziej zaawansowane narzędzie oparte na chmurze dla programistów, którzy dbają o integralność kodu.
- Oparte na chmurze: Brak wtyczek do zainstalowania.
- Świadome kontekstu: Wykorzystuje AI klasy Gemini/GPT-4 do naturalnego formułowania.
- Zablokowana składnia: Gwarantowana ochrona Twoich zmiennych.
Gotowy do tłumaczenia bez bólu głowy? Zacznij za darmo na SimplePoTranslate.com