Dlaczego polski i dlaczego właśnie teraz?
Witryna ma sporą polską publiczność czytającą wersję angielską (Google Search Console pokazuje pl-PL na 5. miejscu wśród krajów pod względem wyświetleń), a polska terminologia naukowa ma dobrze ugruntowane konwencje akademickie, które tłumaczenie maszynowe zazwyczaj wypacza („Inżynieria Materiałowa”, a nie „Inżynieria Materiałów”; „Dynamika Płynów”, a nie „Dynamika Cieczy”). Wykonanie tego jako jednego wydania infrastrukturalnego, zamiast rozpraszania tłumaczeń po cotygodniowych falach, utrzymuje warstwę lokalizacji chirurgicznie czystą.
Co faktycznie obejmuje „faza 1”
Faza 1 to warstwa punktów wejścia — każda strona, na którą polski czytelnik prawdopodobnie trafi z wyszukiwania organicznego:
- /pl/ — strona główna z JSON-LD WebSite + BreadcrumbList + FAQPage (8 polskich pytań i odpowiedzi, każda po 100–300 słów; kwalifikujących się do rozszerzonych wyników FAQ w Google).
- /pl/categories/ — alfabetyczny hub wszystkich 80 kategorii, posortowany według ich polskich nazw (więc „Algorytmy” pojawia się przed „Astronomia”, a nie gdzieś na „K”, jak w wersji angielskiej).
- /pl/categories/<id>/ — 80 stron kategorii, każda z zlokalizowanym hero, JSON-LD CollectionPage wymieniającym każdą symulację należącą do kategorii oraz jawną notatką zastępczą („Symulacja w jęz. angielskim”) na każdej karcie symulacji, aby odwiedzający nie byli zaskoczeni, gdy trafią na stronę EN/UK.
- /pl/about/, /pl/contact/, /pl/privacy/, /pl/terms/, /pl/blog/, /pl/sitemap-html/, /pl/knowledge-graph/ — 7 stron statycznych potrzebnych każdej lokalizacji. Polityka prywatności i Regulamin to pełny polski tekst; Blog i Graf wiedzy to zaślepki-zapowiedzi odsyłające do wersji EN/UK do czasu fazy 2.
Faza 1 celowo nie tłumaczy 559 stron symulacji ani 295 artykułów. Będzie to zadanie fazy 2 (plan na Q3 2026), ponieważ wartość tłumaczenia na stronę dla punktu wejścia („Fizyka kwantowa”) jest dużo wyższa niż tłumaczenie jednej konkretnej, niszowej symulacji („protokół BB84”).
Warstwa tłumaczeń
Tłumaczenia żyją w danych, nie w szablonach. Każdy wiersz w
shared/data/categories.json ma teraz dwa dodatkowe pola
obok swoich ukraińskich odpowiedników:
{
"id": "fluid-dynamics",
"title": "Fluid Dynamics",
"titleUk": "Гідродинаміка",
"titlePl": "Dynamika Płynów",
"description": "SPH, MPM, Navier-Stokes equations...",
"descriptionUk": "SPH, MPM, рівняння Нав'є-Стокса...",
"descriptionPl": "SPH, MPM, równania Naviera-Stokesa, fale strzemienne, turbulencja."
}
Tłumaczenia są kuratorskie, nie generowane maszynowo. Mała próbka decyzji, które miały znaczenie:
| ID kategorii | Angielski | Polski (wybrany) | Dlaczego nie dosłowne MT |
|---|---|---|---|
materials-science | Materials Science | Inżynieria Materiałowa | Polska akademia stosuje ujęcie inżynierskie dla tej dziedziny; „Materiałoznawstwo” istnieje, ale jest przestarzałe. |
fluid-dynamics | Fluid Dynamics | Dynamika Płynów | „Płyny” obejmuje zarówno ciecze, jak i gazy; „Cieczy” wykluczałoby gazy. |
chronobiology | Chronobiology | Chronobiologia | Bezpośrednie zapożyczenie; „Biologia rytmów” zaciemniałaby nazwę dziedziny. |
networks | Networks | Sieci | Samo „Sieci”, a nie „Sieci komputerowe”, bo kategoria obejmuje też sieci społeczne/biologiczne/transportowe. |
perception | Perception | Percepcja | Zarówno „Percepcja”, jak i „Postrzeganie” działają; „Percepcja” to termin z podręczników kognitywistyki. |
game-math | Game Math | Matematyka Gier | Dopełniacz („Matematyka Gier”) to naturalne złożenie, a nie „Matematyka Gra”. |
Trójstanowy przełącznik w pasku nawigacji
Przed v1.1.8 przełącznik języka w pasku nawigacji był pojedynczym przyciskiem przełączającym EN ↔ UK na podstawie bieżącej ścieżki. Dodanie trzeciej lokalizacji wymusiło decyzję projektową: rozwijana lista, trzy pigułki czy cykl? Wygrał cykl — ten sam pojedynczy przycisk, ale teraz przechodzący EN → UK → PL → EN przy każdym kliknięciu. Dwa powody:
- Bez przesunięcia układu. Istniejący pasek nawigacji miał ciasne odstępy pikselowe na urządzeniach mobilnych; dodanie dwóch kolejnych chipów wypchnęłoby wyszukiwarkę i przełącznik motywu poza ekran na widokach o szerokości 360 pikseli.
-
Zachowanie ścieżki działa tak samo. Funkcja
pomocnicza
getLangHrefs()zwraca teraz wszystkie 3 adresy dla bieżącej strony (najpierw usuwając/uk/lub/pl/, a następnie dodając docelową lokalizację na początek), agetAlternateHref()po prostu wybiera „następny” wpis. Obsługa kliknięć dla ponownego obliczania w stylu SPA nadal działa, bo funkcja jest przeliczana w momencie kliknięcia.
Cykl jest przechylony w stronę EN, bo to najpełniejsza lokalizacja — jeśli przewiniesz obok swojego celu, jedno kolejne kliknięcie prowadzi do EN, gdzie strona zawsze istnieje.
// shared/components.js
function getLangHrefs() {
const rootUrl = new URL(_base || "./", window.location.href).href;
const noLang = currRelPath.replace(/^(uk|pl)\//, "");
const hrefs = {
en: rootUrl + noLang,
uk: rootUrl + "uk/" + noLang,
pl: rootUrl + "pl/" + noLang,
};
const cycle = { en: "uk", uk: "pl", pl: "en" };
hrefs.next = hrefs[cycle[_lang] || "uk"];
return hrefs;
}
Chirurgia hreflang na 174 istniejących stronach
Dodanie trzeciej lokalizacji to nie tylko tworzenie nowych plików;
każda istniejąca strona EN i UK, która ma polskiego
bliźniaka, potrzebuje
<link rel="alternate" hreflang="pl"> w swoim
head, inaczej Google nie połączy klastra. Skrypt
add_pl_hreflang.js:
- Przechodzi przez indeks główny, indeks UK, hub kategorii, wszystkie 80 kategorii EN + 80 UK oraz 14 par stron statycznych.
- Wykrywa istniejące znaczniki
hreflang="pl"i pomija, jeśli są już poprawne. - Usuwa wszelkie błędne znaczniki PL (np. wskazujące na niewłaściwy cel).
- Wstawia nowy znacznik zaraz po
hreflang="uk", jeśli obecny, z powrotem do wstawienia pohreflang="en", z powrotem do wstawienia przed</head>.
Idempotentny z założenia: uruchomienie dwukrotnie nie zmienia żadnego pliku. Zaktualizowano 174 strony, 0 już poprawnych (pierwsze uruchomienie), 4 pliki brakujące (to były bliźniacy UK, którzy nigdy nie istnieli dla niektórych stron statycznych).
Mapa witryny: 2158 → 2247 adresów URL
scripts/gen_sitemap.js automatycznie podchwycił PL,
bo istniejąca pętla dla każdej lokalizacji sprawdza teraz
pl/<path>/index.html obok wariantów EN i UK.
Każdy wpis URL ma towarzyszący
<xhtml:link rel="alternate" hreflang="pl">, gdy
polski bliźniak istnieje.
Adresy URL PL są emitowane z priorytetem o 0,05–0,10 niższym niż ich odpowiedniki EN (więc 0,8 dla kategorii PL wobec 0,9 EN) jako miękki sygnał, że lokalizacja jest zaślepką fazy 1. Pięć podmap witryny daje teraz łącznie 2247 adresów URL: sitemap_categories.xml (240, +80), sitemap_sims.xml (1118), sitemap_articles.xml (555), sitemap_blog.xml (224), sitemap_static.xml (28, +6).
FAQPage jako akcelerator wyników wyszukiwania
Rozszerzone wyniki FAQPage w języku polskim pozostają relatywnie niedowykorzystane dla zapytań naukowo-edukacyjnych, co czyni je dobrym wczesnym zakładem dla fazy 1. Polska strona główna ma 8 wpisów FAQ obejmujących pytania, które pojawiają się w mailach wsparcia i na Discordzie: „Czy trzeba coś instalować?”, „Czy te symulacje są naukowo poprawne?”, „Czy mogę używać symulacji w szkole?”. Każda odpowiedź liczy 100–300 słów, aby przejść próg jakości Google; razem stanowią najbardziej czytelny pojedynczy dokument o tym, do czego służy MySimulator, w dowolnym języku.
Co odłożono do fazy 2 (Q3 2026)
- Strony symulacji. Top 100 symulacji przetłumaczonych na polski; długi ogon (459 wyspecjalizowanych symulacji) pozostaje EN/UK.
- Artykuły. Top 50 artykułów pod względem ruchu, przetłumaczonych na polski.
- Blog. Polskojęzyczna seria devlogów zaczynająca się od wpisu-zapowiedzi fazy 2.
- Etykiety węzłów grafu wiedzy. Obecnie graf sił D3 pokazuje nazwy EN/UK; faza 2 przełączy etykiety w zależności od lokalizacji.
- Indeks wyszukiwania. Dodanie
titlePl+descriptionPldo korpusu wyszukiwania, aby osoba polskojęzyczna wpisująca „kwantowy” znajdowała odpowiednie kategorie. - Strony tagów. Przetłumaczenie ponad 80 stron tagów na polski.
Kolejność wpływu (szacowana na podstawie współczynników konwersji EN→UK faza 1→2): strony symulacji dają 5–10× większy wolumen kliknięć niż strony kategorii, artykuły dają 2–3× więcej (dłuższy czas przebywania, mniej odrzuceń), a strony tagów wypełniają długi ogon.
Zmienione pliki
Pięć nowych skryptów wystarczyło, aby przeprowadzić całe wydanie; wszystko inne jest generowane:
scripts/add_pl_translations.js— wypełniatitlePl+descriptionPlwcategories.json.scripts/gen_pl_pages.js— generuje wszystkie 89 plików HTML PL.scripts/add_pl_hreflang.js— łata 174 strony EN+UK.scripts/gen_sitemap.js— rozszerzony dla klastrów URL 3 lokalizacji.shared/components.js— rozszerzony dla trójstanowego paska nawigacji zI18N.pl+getLangHrefs().
Uruchomienie node scripts/add_pl_translations.js &&
node scripts/gen_pl_pages.js && node
scripts/add_pl_hreflang.js && node scripts/gen_sitemap.js
odtwarza całe wydanie wyłącznie z warstwy danych.
Co dalej
Fala 62 wraca do symulacji w przyszłym tygodniu — prawdopodobnie dynamika płynów i mechanika statystyczna. Przygotowania do fazy 2 PL (aktualizacja indeksu wyszukiwania, narzędzia do tłumaczenia symulacji) będą przebiegać cicho, równolegle; spodziewajcie się, że faza 2 wyląduje mniej więcej na granicy Q3 2026.