Architektura

Kolofon · 9 sierpnia 2026

21 · Wersje językowe bez centrali

sierpień 2026 — przy pierwszej instancji nie-polskiej

21 · Wersje językowe bez centrali

Tekst: Kolofon

Wersja językowa jest tu osobną instancją: własna subdomena, własny worker, własna baza. Nie jeden serwis z przełącznikiem, tylko dwa serwisy, które o sobie wiedzą. Powód jest ten sam, dla którego adres należy do autora — wersja angielska ma móc żyć, upaść albo zniknąć niezależnie od polskiej.

Zostaje pytanie, po czym mają się nawzajem poznawać. Przełącznik języka musi zbudować adres tego samego tekstu u sąsiada, a slug jest w języku treści, więc `zalozenia-wyjsciowe` i `initial-assumptions` nie mają ze sobą nic wspólnego jako ciągi znaków.

Pierwsza odpowiedź, jaka przychodzi do głowy, to mapa: plik, w którym stoi, co czemu odpowiada. Odrzucona. Mapa jest strukturą, którą trzeba pamiętać o aktualizacji, a zapomni się o niej dokładnie wtedy, gdy ktoś zmieni slug — czyli w chwili, w której była jedynym powodem, żeby istniała.

Druga odpowiedź jest ambitniejsza i gorsza: centralny katalog. Jeden serwis zna wszystkie języki i wszystkie mapowania, instancje pytają jego i nie muszą wiedzieć o sobie nawzajem. Brzmi jak porządek. Jest pośrednikiem — dokładnie tym, przeciwko któremu ten silnik powstał. Serwis, który musi kogoś zapytać, żeby zbudować własne menu, ma nad sobą platformę, choćby prowadził ją autor silnika. Do tego dochodzą dwa skutki praktyczne: gdy centrala leży, przełącznik nie działa nigdzie naraz, a katalog i tak musi skądś znać slugi, więc mapa wraca — tylko teraz w jednym miejscu, z którego psuje wszystkich.

Rozwiązanie odwraca kierunek pytania. Wpis i seria noszą pole `key` — stały identyfikator, wspólny dla wszystkich języków, celowo neutralny: `arch-21`, a nie nazwa czegokolwiek. Slug wolno zmieniać, klucza nie. Przełącznik składa adres `<wersja>/i/<klucz>` i na tym jego wiedza się kończy. Trasa `/i/` po tamtej stronie rozstrzyga klucz na lokalny adres i przekierowuje.

Cała sztuczka polega na tym, kto odpowiada na pytanie. Odpowiada instancja docelowa, bo jest jedyną, która zna swoje ścieżki — i jedyną, która nie może się w tej sprawie pomylić. Nie ma mapy, bo nie ma miejsca, w którym mapa byłaby potrzebna.

Ta sama trasa załatwia hreflang. Skrypt przy budowaniu pyta sąsiadów po kolei o każdy klucz: dostaje przekierowanie albo 404, i z tego składa listę odpowiedników. Gdy sąsiad milczy, build kończy się chudszym hreflangiem zamiast błędem — bo niedostępność cudzego serwisu nie jest awarią własnego.

Koszt jest jeden i trzeba go nazwać: klucze trzeba nadać wszystkim wpisom, a im później się to zrobi, tym gorzej. Przy trzydziestu czterech to skrypt i jeden przegląd zmian. Przy stu trzydziestu to ta sama operacja, której nikt już nie przeczyta.