← Wróć do artykułów
Web 2026-04-17 · rev. 2026-05-10 ProtoMedia

Strona, która mówi dziesiątkami języków, bez tłumaczy

Przetłumaczono automatycznie z języka włoskiego · oryginalny tekst

Jak zbudowaliśmy system tłumaczeń, który działa pod tymi stronami: AI w razie potrzeby, zawsze pamięć podręczna, zero odczuwalnego czasu oczekiwania.

Problem tradycyjnej internacjonalizacji (i18n)

Przez lata internacjonalizacja strony internetowej była małą odyseją przepływu pracy: pliki .po, tłumacze ludzcy, zapomniane klucze, opóźnione wdrożenia, ponieważ "brakuje jeszcze niemieckiego". Dodanie języka kosztowało czas i pieniądze; dodanie dziesięciu było poza zasięgiem dla każdej małej firmy.

Dzięki LLM najnowszej generacji jakość tłumaczenia maszynowego osiągnęła punkt, w którym — dla strony firmowej, a nie literatury — jest wystarczająca. Pytanie nie brzmi już "czy możemy to przetłumaczyć automatycznie", ale "jak to zintegrować, nie psując wrażeń użytkownika".

Architektura, w skrócie

Strona jest serwowana statycznie w języku włoskim. Kiedy użytkownik wybierze inny język, wchodzi do gry mały silnik działający na trzech kolekcjach MongoDB:

  • i18n_base: teksty źródłowe w wybranym języku (obecnie włoskim), każdy z deklaracją swojego języka, opisem miejsca i powodu występowania na stronie (kluczowe dla jakości tłumaczenia), tonem i limitem znaków. Ten opis staje się częścią promptu dla LLM, dzięki czemu wie on, czy tłumaczy przycisk, czy akapit.
  • i18n_human: tłumaczenia dopracowane ręcznie, gdy dla jakiejś strony chcemy jakości redakcyjnej zamiast wyniku LLM. Mają one priorytet nad automatyczną pamięcią podręczną i są automatycznie "odznaczane", gdy tekst źródłowy się zmieni.
  • i18n_cache: tłumaczenia już wygenerowane, indeksowane według (pola, języka). Każdy wpis zachowuje znacznik czasu tekstu bazowego w momencie generowania.
  • articoli_i18n: ta sama logika zastosowana do dłuższych treści, takich jak ten artykuł.

Przy pierwszym dostępie w nowym języku system prosi LLM tylko o brakujące pola, zapisuje odpowiedź w pamięci podręcznej i zwraca ją do przeglądarki. Przy kolejnych wizytach ten sam język dociera natychmiast, bez dalszych wywołań AI.

Unieważnianie, które działa

Cache to uporządkowane kłamstwo: mówi "moją prawdą jest to" dopóki ktoś go nie obali. Mechanizm obalania tutaj jest prosty: każda pamięć podręczna tłumaczenia przechowuje znacznik czasu tekstu źródłowego, który ją wygenerował. Kiedy modyfikujesz tekst włoski i zwiększasz jego updated_at, wszystkie tłumaczenia tego pola we wszystkich językach automatycznie stają się nieaktualne i są regenerowane w razie potrzeby. Zero ręcznych kaskad, brak konieczności czyszczenia pamięci podręcznej.

Użytkownik, który nie czeka

Najciekawsza nie jest sama translacja — ale sposób jej wyświetlania. Przy zmianie języka, przeglądarka widzi stronę włoską z małymi wskaźnikami ładowania obok każdego bloku tekstu do zaktualizowania. Pokusa jest taka, aby wykonać jedno wywołanie, które przetłumaczy wszystko razem: proste, czyste i skazuje użytkownika na czekanie, aż LLM skończy wszystko, zanim zobaczy jakiekolwiek zmiany.

Poszliśmy w przeciwnym kierunku. Teksty są grupowane według sekcji (navbar, treść, stopka) i dzielone na mikro-pakiety po trzy pola każde. Wywołania startują sekwencyjnie: najpierw kilka pól navbar, które pojawiają się w ciągu kilku sekund — użytkownik widzi, że coś się dzieje i zaczyna czytać. Podczas czytania pojawia się pierwsza część treści, potem druga, a na końcu stopka.

Lekcja w skrócie: Postrzegana szybkość nie jest równa całkowitej prędkości. Tłumaczenie fragment po fragmencie, w kolejności widocznej dla użytkownika, jest ważniejsze niż ukończenie zadania jako pierwsze.

Praca w nocy

Pamięć podręczna ma tylko jednego prawdziwego wroga: pierwszą wizytę. Pierwszy niemiecki użytkownik płaci cenę za wszystkie przyszłe tłumaczenia, a jego doświadczenie jest tym, co pozostaje mu w pamięci. Aby wyeliminować (lub prawie) ten problem, zadanie działające w tle budzi się co minutę, wybiera najbardziej oczekiwany język spośród tych jeszcze nieukończonych, pobiera nieprzetłumaczony tekst i przekazuje go do LLM. Następna minuta, następny tekst. W ciągu kilku dni najpopularniejsze języki są już gotowe.

Nocne zadanie wykonuje również drugą pracę: automatycznie sprawdza tłumaczenia o wątpliwej jakości, ponawiając próby z innym modelem AI. Kiedy dopasowanie między językami jest ważne, przeciętne tłumaczenie nie pozostaje takie.

Jeśli jesteś pierwszym Niemcem, który odwiedza stronę danego dnia i przybywasz, gdy system wciąż kończy wypełniać pamięć podręczną, masz przynajmniej postępujące ładowanie, które zajmuje cię. Jeśli jesteś drugim, nawet tego nie zauważysz.

Co z tego wynika

Strona wielojęzyczna bez tłumaczy, bez plików do zarządzania, bez wdrażania, aby dodać język. Użytkownik wpisuje kod — ja, ca, eu, co chce — a strona się tłumaczy. Za drugim razem jest to natychmiastowe. Za trzecim, bardzo prawdopodobnie już tam dotarliśmy, przetłumaczone w odpowiednim momencie przez zadanie, które nigdy nie śpi.

Ta sama strona, jeśli czytasz ją po niemiecku, hiszpańsku, koreańsku, nie została nigdy napisana przez tłumacza. Została przetłumaczona tylko raz przez LLM, a następnie jest obsługiwana z pamięci podręcznej. Jedyną rzeczą napisaną ręcznie jest to, co czytasz teraz, jeśli jest po włosku.

Zainteresowany wdrożeniem tej architektury na swojej stronie? Porozmawiajmy.

Skontaktuj się z nami

Masz uwagę? Napisz do nas

Wiadomość dotrze tylko do nas. Jeśli Twój komentarz będzie interesujący, możemy go opublikować na końcu artykułu, ale dopiero po weryfikacji.

Podczas pisania przeglądarka rozwiązuje proste zadanie obliczeniowe – to nasz sposób na blokowanie spamu bez użycia zewnętrznych usług i testów typu „wybierz sygnalizację świetlną”. Nie pytamy o nic i żadne dane nie opuszczają tej strony.