časť 16
Päť jazykov, jeden rod a klávesa H, ktorá nefungovala
Preklad hry nie je len výmena slov. Množné čísla, rod v minulom čase, cyrilika, rozloženie klávesnice a strojový preklad, ktorý je ako hrubý koncept, kým ho nikto neskontroluje.
Prečo je preklad zaujímavý pre blog o hre s kockami? Lebo pri ňom sa ukáže, ako veľmi sa hra spolieha na veci, ktoré sa jej zdali samozrejmé. Napríklad na to, že sa dá povedať „vyhral si“.
Audamir dnes hovorí deviatimi jazykmi (srbčina je v latinke aj cyrilike). Tento článok sa drží prvých piatich, na ktorých sa pravidlá ukázali: po slovensky, anglicky, česky, srbsky a rusky. Slovenčina a angličtina sú hotové. Češtinu mám prečítanú celú (6. novembra 2026) a označenie beta jej zmizlo. Srbčina a ruština sú kompletné strojové návrhy označené beta: každá má všetkých 4 196 textov anglického vzoru (v čase prekladu ich bolo 2 588), ale zatiaľ ich nikto nečítal ako rodený hovoriaci. Hra to hovorí otvorene: vo výbere jazyka je pri nich „(beta)“ a v nastaveniach poznámka. Štyri jazyky prvej vlny (španielčina, brazílska portugalčina, francúzština a nemčina) pribudli 22. októbra ako rovnaké strojové návrhy.
Ďalšie jazyky: štyri vlny
Poradie nevzniklo náhodou. Podľa plánu rozšírení sa ďalšie jazyky pridávajú vo štyroch vlnách. Rozhoduje dosah, nie počet hovoriacich:
| Vlna | Jazyky | Poznámka z plánu |
|---|---|---|
| 1 | španielčina, brazílska portugalčina, francúzština, nemčina | latinka a najväčší dosah za najmenšiu prácu; francúzski čitatelia v Afrike majú často drahé dáta, kde záleží na malej stránke |
| 2 | turečtina, indonézština, poľština, taliančina | lacné a veľké mobilné publikum; poľština má tri tvary množného čísla ako ruština |
| 3 | japončina, čínština (dva balíky), kórejčina, hindčina | hindčina: Ludo je tam fenomén; japončina rezonuje s pôvodným Dice Wars |
| 4 | arabčina a ďalšie jazyky písané sprava doľava | vlastná kapitola: zrkadlové rozloženie a šesť tvarov množného čísla |
Prvá vlna je v hre od 22. októbra; ostatné sú plán.
Dve väzby stoja za pozornosť. Hindčina: o indickom Ludo a jeho mobilnej verzii je samostatný článok. Japončina: pôvodný Dice Wars je japonská hra a vývojár GAMEDESIGN je japonský (úvod).
Prečo je „5 kociek“ iné ako „2 kocky“
V angličtine sú dva tvary: 1 die, 2 dice. V slovenčine a češtine tri: 1 kocka, 2 až 4 kocky, 5 a viac kociek. V srbčine a ruštine je pravidlo zložitejšie, lebo rozhoduje koniec čísla, nie celé číslo. Hra sa pozerá na posledné dve číslice:
- číslo končí na 1, ale nie na 11 (1, 21, 31, 101…): prvý tvar,
- číslo končí na 2, 3 alebo 4, ale nie na 12, 13 ani 14 (2, 3, 4, 22, 23, 24, 102…): druhý tvar,
- všetko ostatné (0, 5 až 20, 25 až 30, 111 až 114…): tretí tvar.
V ruštine to vyzerá takto: 1 кубик, 2 кубика, 5 кубиков, 11 кубиков, 12 кубиков, 21 кубик, 22 кубика, 25 кубиков. Čísla 11 a 12 „končia“ na 1 a 2, a predsa patria do tretieho tvaru, a 21 sa správa ako 1. V slovenčine je naopak 21 už „5 a viac“: 21 kociek.
Preto má každý text s číslom skupinu {n#kocka|kocky|kociek}: n je číslo a za # sú tvary od prvého po posledný. Pre češtinu, srbčinu a ruštinu overuje kontrola, že má presne tri tvary. Tu je jedna a tá istá veta z hry (kľúč core.app.wear_spoils) v štyroch jazykoch:
en After round {round} every captured tile brings {n} extra {n#die|dice}.
sk Po {round}. kole prináša každé dobyté políčko {n} {n#kocku|kocky|kociek} navyše.
sr Posle {round}. runde svako osvojeno polje donosi {n} {n#kocku|kocke|kocki} više.
ru После {round}-го раунда каждая захваченная клетка приносит ещё {n} {n#кубик|кубика|кубиков}.
Pre n = 1 vypíše hra v ruštine „1 кубик“, pre 2 „2 кубика“ a pre 5 „5 кубиков“. Angličtina má dva tvary, ostatné jazyky tri. Pravidlo ruštiny a srbčiny je v kóde jeden výraz (i je číslo bez znamienka, výsledok je poradie tvaru od nuly):
const m10 = i % 10, m100 = i % 100;
return m10 === 1 && m100 !== 11 ? 0 : m10 >= 2 && m10 <= 4 && (m100 < 12 || m100 > 14) ? 1 : 2;
Zlomky majú vlastné pravidlo: berú druhý tvar (genitív jednotného čísla: „1,5 kostky“, „2,5 кубика“). V hre sa zatiaľ nikdy neuplatňuje, lebo všetky parametre množného čísla sú celé čísla, no prvá verzia pravidla bola nesprávna (brala posledný tvar) a našla ju revízia.
Rod: hra nevie, kto hrá
Slovenský minulý čas má rod: „vyhral si“ a „vyhrala si“. Hra nevie, ktoré z nich je správne. Riešenia sú dve a hra používa obe.
Prvé: písať bez rodu. Rozkazy, podstatné mená, prítomný čas („Prehra“, „Pozri na šancu“). Štyri jazyky s rodom (slovenčina, čeština, srbčina, ruština) dostávajú rovnaké pravidlo a regulárne výrazy v testoch (niekoľko na každý jazyk) odmietnu tvary typu „vyhrál jsi“, „pobedio si“, „ты победил“. Rozprávač je kocka (v slovenčine ženského rodu) a hovorí v prvej osobe, takže aj jeho repliky sú buď bez minulých tvarov, alebo majú rodové skupiny.
Druhé: nechať hráča povedať. Je tu nastavenie Rod[1] (Neurčený, Mužský, Ženský) a skupina {gender#…|…|…} s tromi tvarmi. Neurčený tvar je pôvodný text bez rodu: kto nič nenastaví, nezmenia sa mu žiadne vety, a nikto nehovorí „vyhralo si“. Z 318 kandidátskych textov (celý hlas rozprávača, koniec hry, lekcie) sa po prečítaní štyrmi prekladateľmi zmenilo 26 slovenských, 24 českých, 24 srbských a 20 ruských. Číslo je zámerne malé: väčšina textov bola bezrodá od začiatku.
Takto vyzerá titulok prehry (kľúč core.app.lost_title). Angličtina skupinu nemá, ostatné štyri jazyky ju majú v poradí mužský | ženský | neurčený:
en You lost
sk {gender#Prehral si|Prehrala si|Prehra}
cs {gender#Prohrál jsi|Prohrála jsi|Prohra}
sr {gender#Izgubio si|Izgubila si|Poraz}
ru {gender#Ты проиграл|Ты проиграла|Поражение}
Kto nič nenastaví, dostane tretí tvar a ten rod nemá: „Prehra“, „Poraz“, „Поражение“. Skupiny sa dajú vnoriť: veta o dobytí celej mapy (core.app.conquest_text) má rodovú skupinu a v každom jej tvare ešte skupinu množného čísla pre počet kôl:
sk {gender#Dobyl si celú mapu za {round} {round#kolo|kolá|kôl}.|Dobyla si celú mapu za {round} {round#kolo|kolá|kôl}.|Celá mapa je dobytá za {round} {round#kolo|kolá|kôl}.}
Poznámka bokom: aj tento blog je písaný tak, aby sa vyhol rodovo označeným tvarom prvej osoby minulého času. Nájdeš v ňom „moje rozhodnutie“, „zistilo sa“ a „vyšlo“, ale máločo ako „urobil som“. Nie je to štylistická nehoda, je to to isté pravidlo.
Cyrilika, ktorá vzniká z latinky
Srbčina sa píše aj latinkou, aj cyrilikou. Hra neukladá dva katalógy. Uložená je latinka a cyrilika sa z nej vytvára pri prvej voľbe (translit-sr.js). Znie to jednoducho: každé písmeno má zodpovedajúce písmeno. Nie je. lj, nj a dž sú vždy jedno písmeno, až na pár slov, kde sú dve (napríklad podžupan). Výnimky boli v prvej verzii príliš široké a slovo odžak (komín) sa prepísalo na „оджак“ namiesto „оџак“. A to, čo je v texte značka, zástupný znak alebo názov, ktorý ostáva latinkou (XP, AI, Hero Dice), sa nesmie prepísať.
Pri prepise celého katalógu sa našli dve chyby, ktoré jednotkové testy nezachytili: zástupný znak vo vnútri atribútu (aria-label="{earned} od 3 zvezdice") sa prepísal na {еарнед} a skratka XP stratila X.
A potom prišla recenzia.
Klávesa H, ktorá nič nerobí
Klávesové skratky hry (H nápoveda, S štatistiky, L legenda) porovnávali znak, ktorý sa napísal, s latinskými písmenami. Na ruskej klávesnici je na klávese, ktorá je na latinskej klávesnici H, písmeno „р“. Skratka nefungovala. Oprava používa fyzickú klávesu (KeyH), keď sa napísaný znak nedá zaradiť medzi latinské písmená. Latinské písmeno sa berie ako napísané, takže funguje aj Dvorak.
A ďalšia chyba z toho istého druhu: v srbskej cyrilike sa <kbd>H</kbd> prepísalo na cyrilické „Х“, ktoré vyzerá ako latinské X. Hra hráčovi radila stlačiť klávesu, ktorá nič nerobí. Dnes ostávajú označenia klávesov v latinke.
Strojový koncept a čo sa s ním robí
Čeština, srbčina a ruština vznikli strojovým prekladom: slovník pojmov v docs/I18N.md je zmluva, prekladatelia ho dostali, a po preklade prešla celým katalógom terminologická kontrola, aby rovnaké slovo znamenalo rovnakú vec. Nikto však nehovorí, že je to hotové. Kým ho neprečíta rodený hovoriaci, zostáva v hre označenie beta; češtinu mám prečítanú celú (6. novembra 2026) a označenie jej zmizlo.
Čo prezradila revízia vzorky (87 textov na jazyk a všetky repliky rozprávača):
- Srbčina: „beg“ vo výraze Gvozdeni beg (109 textov) znamená v srbčine skôr útek než beh. Správne je „pohod“. „Klasik“ (30 textov) je slovenský kalk a znamená „klasický autor“: správne je „Klasika“.
- Ruština: „перебросок“ nie je podstatné meno (správne „переброс“, 10 textov). Vzhľady sa po novom volajú „облики“ (18 textov). Päť textov používalo „сам“ ako oslovenie hráča, čo je rodové.
- Čeština: „sám“, „Zapnutý / Vypnutý“ ako stav (správne „Zapnuto / Vypnuto“).
- Pomlčky: v ruskom katalógu bolo 75 textov s pomlčkou, ktorá nezodpovedala ostatným, a boli zjednotené.
Chyba v jednom pojme je chyba v stovke textov. Preto je prvou vecou, ktorá sa po prečítaní opravuje, slovník.
Aby text nepretekal
Iný jazyk znamená iné dĺžky slov. Nástroj na skenovanie pretečenia (i18n-scan.js) prejde 15 obrazoviek pri 375 a 1100 pixeloch a porovná každý jazyk s angličtinou. Pri tvorbe sa ukázalo, že prvá verzia nevidela vôbec nič: slovo s tristo písmenami v pravidlách ju nechalo chladnou, lebo blok nenarastie pre slovo, ktoré sa nedá zalomiť, a všetko vo vnútri posúvateľnej krabice sa vynechávalo. Nástroj sa preto upravil, aby videl, a overil sa na zámerne pokazenom texte. Až potom našiel skutočný problém: ruský názov minihry o zrade („Предательство“) sa na telefóne nezmestil na kartu. Dnes je to „Измена“.
Je to ten istý postup, ktorý sa používa pri mutačnej kontrole: kontrola, ktorá nikdy nič nenájde, môže byť slepá. Najprv ju treba pokaziť.
Balíky a veľkosť
Spočiatku boli všetky jazyky v jednom balíku, čo stálo 670 kB navyše (surových, po gzip 185 kB). Dnes je každý jazyk samostatný balík: stránka načíta angličtinu a ten jeden jazyk, ktorý zobrazuje. Jazykov je deväť a zostavená hra ich má ako deväť súborov s textami (srbská cyrilika sa vyrába z latinky pri prvom použití). Na texty stránka potrebuje po gzip 88 kB v angličtine, 183 kB v slovenčine a najviac 199 kB (ruština); čísla dnešných súborov sú v článku Ako sa hra Audamir prekladá dnes (pripravovaný článok č. 55). Ostatné balíky sa uložia do cache pri prvom použití. Cena: prvé prepnutie na iný jazyk potrebuje sieť; bez nej hra nespadne, ale hovorí po anglicky.
Vo výbere jazyka je od 22. októbra namiesto vlajky odznak s kódom jazyka (EN English, SK Slovenčina, SR Srpski, SR Српски), lebo vlajka nie je jazyk. Rozhodnutie padlo 19. októbra a zapracované je od 22. októbra; test manifestu jazykov (tests/i18n/packs.test.js) vlajku v zozname zakazuje.
Čo si z toho odnášam
- Preklad je test pravidiel hry. Rod a množné číslo odhalia predpoklady, o ktorých sa ani nevedelo.
- Preklad otvára chyby mimo textu. Skratky klávesnice, abecedy a šírky slov vyšli najavo až pri iných jazykoch než slovenčine.
- Konceptu sa hovorí koncept. Označenie beta je poctivejšie než pokračujúca ilúzia.
- Slovník je zmluva. Oprava jedného pojmu opraví stovky textov.
- Skener, ktorý nič nevidí, nie je skener. Najprv ho pokaz.
Zdroje a poznámky
docs/DESIGN.md§29 (jazyky, overenie, revízia) a §30.3 až §30.4 (balíky a rod hráča);docs/I18N.md;docs/ROADMAP.md, kapitola 9 (vlny a rozhodnutie o kódoch jazykov). Veľkosti:docs/DESIGN.md§30.3.- Príklady textov sú z katalógov
js/i18n/{en,sk,cs,sr,ru}.js(kľúčecore.app.wear_spoils,core.app.lost_title,core.app.conquest_text) a pravidlá množného čísla zjs/i18n/i18n.js(pluralEastSlavic), všetko v hre 0.123.1 (6. novembra 2026); počet textov a veľkosti zostavenej hry sú z hry 0.124.0 (tiež 6. novembra) a sú rozpísané v 055. Premenovanie nastavenia:docs/DESIGN.mda zoznam zmien hry (0.108.1). - Počty hovoriacich v pláne (španielčina približne 560 miliónov, brazílska portugalčina 260 miliónov, francúzština 330 miliónov, nemčina 130 miliónov) sú odhady z ROADMAPU, nie moje overené údaje a v texte ich zámerne neuvádzam.
Poznámky
- Do verzie 0.108.0 sa nastavenie volalo Pohlavie (Neurčité, Muž, Žena); od verzie 0.108.1 zo 4. novembra 2026 sa volá Rod (Neurčený, Mužský, Ženský; anglicky Grammatical gender). ↩︎