Jak nasza gra nauczyła się czternastu języków w tydzień 🌍
10 sierpnia 2026
Gdy zaczynaliśmy, Blocks Beyond the Stars mówiło dokładnie dwoma językami: niemieckim, bo tu mieszkamy, i angielskim, bo internet mówi po angielsku. Dziś mówi czternastoma. Oto jak do tego doszło — i wszystko, co po drodze się zepsuło. 🌍
Zaczęło się od Francesca. Kilka tygodni temu przyszedł z Włoch pull request: Francesco Quirino zaczął tłumaczyć grę na włoski. Ręcznie. Grupa po grupie, od wszystkich 290 nazw bloków i ich opisów. To był moment, w którym zrozumieliśmy, że musimy poważnie potraktować języki — bo do tej pory połowa tekstów gry w ogóle nie nadawała się do tłumaczenia. Ponad 300 komunikatów serwera było na sztywno po angielsku. Najpierw więc posprzątaliśmy, żeby praca Francesca miała gdzie wylądować.
Potem przyszło niewygodne pytanie. Tłumaczenie języka ręcznie trwa tygodnie. Jesteśmy rodziną, a nie studiem lokalizacyjnym. Zostaje więc maszyna — ale zrobiona porządnie. Zbudowaliśmy małe narzędzie, które tnie plik językowy na kawałki, daje je do przetłumaczenia modelowi językowemu, a potem sprawdza: czy nie brakuje jakiegoś ciągu? Czy nie zniknął znacznik jak {0}? Czy nie wymyślił klucza, który nie istnieje? Jeśli tak, wynik leci do kosza. Dopiero gdy narzędzie działało niezawodnie, zaczęliśmy dodawać języki: niderlandzki, brazylijski portugalski, polski, turecki — a potem rosyjski, ukraiński, chiński, japoński i koreański.
Ton był trudniejszy niż słowa. Model językowy tłumaczy domyślnie uprzejmie i oficjalnie. Ale gra dla dzieci, która zwraca się do was jak list z banku, jest po prostu upiorna. Dlatego każdy język dostał własną regułę: niderlandzkie „je/jij”, polskie „ty”, tureckie „sen”, brazylijskie „você”, rosyjskie „ты”, japońskie です/ます, koreańskie 해요체. Niderlandzki kosztował nas dodatkową rundę, bo IJ na początku wyrazu pisze się wielkimi obiema literami — „IJzererts”, nie „Ijzererts”. Żadna maszyna sama tego nie znajdzie; znajdujecie to, czytając wynik.
A potem były puste kwadraciki. Mieliśmy rosyjski w pełni przetłumaczony, uruchomiliśmy grę — a menu pokazało same prostokąty. Nasza firmowa czcionka, Rajdhani, po prostu nie ma cyrylicy. Z chińskim, japońskim i koreańskim zrobiło się naprawdę niezręcznie: kompletna czcionka CJK waży około 16 megabajtów. Razy trzy to prawie 50 MB — nie do pomyślenia dla gry, która ma też działać w przeglądarce. Rozwiązanie: zbudować dla każdego języka dopasowaną czcionkę-podzbiór, zawierającą dokładnie te znaki, które występują w naszych tekstach. Z 16 MB robi się 800 KB. Zamiast 50 MB gra rośnie o dwa. 🔤
Czego nas to nauczyło. Tłumaczenie to w 20% tłumaczenie, a w 80% cała reszta: w ogóle wyciągnięcie tekstów z kodu, szukanie czcionek, sprawdzanie, czy zdania jeszcze mieszczą się w przyciskach (niemiecki jest długi, ale rosyjski jeszcze dłuższy) i dopilnowanie, żeby nawet okno błędu było przetłumaczone — to, które pojawia się zanim wczytają się pliki językowe. Ten ostatni komunikat musieliśmy wpisać na sztywno czternaście razy. Wydaje się to złe — ale to jedyny komunikat, który absolutnie musicie móc przeczytać.
Bądźmy szczerzy: pierwsza wersja jest tłumaczona maszynowo. Jest dobra, kompletna, zwalidowana — ale nie przeczytał jej rodzimy użytkownik języka. Mówimy to celowo, zamiast udawać, że mamy czternastu tłumaczy. Właśnie dlatego włoska praca Francesca nadal jest zachowana znak po znaku: nasze narzędzie tylko wypełnia luki i nigdy nie nadpisuje ludzkiego tłumaczenia. Tam, gdzie był człowiek, wygrywa człowiek.
Jeśli znacie któryś z tych języków: chętnie przyjmiemy wasze poprawki, nawet jedną jedyną. W repozytorium jest przewodnik po tłumaczeniu, który krok po kroku pokazuje, jak pomóc — a jeśli GitHub nie jest dla was, po prostu napiszcie nam, które zdanie brzmi dziwnie. Rodzimy użytkownik w pięć minut wychwyci więcej niż my w pięć godzin. 🌍✨
Komentarze