Vijesti / ONI Games

Kako smo izradili web od 300 stranica na 16 jezika s jednom Python skriptom

Bez CMS-a i bez frameworka: jedna Python datoteka piše svaku stranicu onirealms.com na 16 jezika, a mali Cloudflare Worker ih poslužuje.

Izrađujemo besplatne igre za Android: dvije idle RPG igre, blok slagalicu i tycoon s tvornicom robota. Svaka je trebala svoju stranicu, a svaka stranica morala je postojati na svim jezicima na kojima se igre igraju. To je 16 jezičnih verzija: engleski, njemački, španjolski (Španjolska i Latinska Amerika), francuski, hrvatski, indonezijski, talijanski, japanski, korejski, portugalski (Brazil i Portugal), ruski, slovenski, turski i tradicionalni kineski.

CMS nam se činio prevelikom mašinerijom za web koji se mijenja kad se promijeni igra. Zato cijeli onirealms.com piše jedna Python skripta kao obične statične datoteke, a ispred njih stoji mali Cloudflare Worker.

Kako je složeno

Skripta site.py jedna je datoteka od oko 3.200 redaka. Sadrži rječnik GAMES s jednim unosom po igri: naziv paketa, tema, glavna ilustracija, trake ilustracija između odjeljaka, žanrovi, dobne oznake i je li igra već objavljena. Sve ostalo izvodi se iz toga.

Tekstovi su u običnim Python rječnicima, razvrstani po jeziku, jedan modul po području: početna stranica, svaka igra, česta pitanja, SEO naslovi i opisi, vodiči i novosti. Stranica igre je funkcija koja primi igru i jezik i vrati HTML. Četiri igre na 16 jezika, uz početnu stranicu, novosti, vodiče, popis kiborga, pravila privatnosti i press kit, daju više od 300 stranica. Cijela izrada traje oko 26 sekundi.

Grafike iz trgovine za Block Brain na japanskom, njemačkom i ruskom.
Grafike iz trgovine za Block Brain na japanskom, njemačkom i ruskom.

Na kraju su tri stvari bile važnije od samog generatora.

1. hreflang mora biti potpun, inače ne služi ničemu

Svaka stranica povezuje na svaku drugu jezičnu verziju sebe, uključujući samu sebe, uz x-default. Sitemap ponavlja iste grupe. Ako jedna nedostaje, tražilice stranice smatraju nepovezanim gotovo-duplikatima. Skripta gradi te poveznice iz istog popisa jezika kojim piše stranice, pa se ne mogu razići.

2. Jezična preusmjeravanja ne smiju zarobiti pretraživače

Worker posjetitelja koji dođe na englesku stranicu šalje na istu stranicu na jeziku njegovog preglednika. To je dobro za igrače, a pogubno za pretraživanje ako se napravi naivno, jer bi robot tražilice uvijek vidio samo preusmjeravanje. Zato nema preusmjeravanja za robote, ni kad posjetitelj dolazi s druge stranice weba (engleski je odabrao namjerno), ni kad adresa sadrži ?lang=, i ne postavlja se kolačić. To je 302 s Vary: Accept-Language, nikad 301.

3. Nepromjenjive datoteke trebaju nova imena

Sve pod /assets/ poslužuje se s Cache-Control: max-age=31536000, immutable. To je prava postavka, dok ne promijeniš sliku i godinu dana je nitko ne vidi. Zato skripte za grafiku za svaku novu verziju pišu novo ime datoteke umjesto da prepišu staru.

Grafike iz trgovine za sve četiri igre: Block Brain na korejskom, Idle AI Factory na turskom, Idle Summoner i Idle Ronin na engleskom.
Grafike iz trgovine za sve četiri igre: Block Brain na korejskom, Idle AI Factory na turskom, Idle Summoner i Idle Ronin na engleskom.

Sitnice koje se isplate

  • QR kodovi na svakoj stranici igre, generirani pri izradi. Vode na kratku poveznicu /go/<game> na Workeru, koja prosljeđuje na Google Play s oznakom izvora, pa Play Console prikazuje instalacije po izvoru.
  • Analitika uz privolu. Oznaka kreće sa svim vrstama pohrane odbijenima (consent mode v2) i uključuje se tek kad posjetitelj prihvati u traci za kolačiće.
  • IndexNow nakon svake objave, da Bing i Yandex vide promjene isti dan.
  • RSS feed za svaki jezik, da čitači feedova i agregatori pokupe novosti.
  • Press kitovi kao ZIP datoteke, koje skripta pakira iz grafika igara.

Što bismo napravili drugačije

Popis jezika i tablice tekstova napisati prije HTML-a, a ne poslije. Naknadno ubacivanje 16 jezika u kod koji je pretpostavljao engleski bio je najsporiji dio cijelog projekta: duljina redaka, rezervni fontovi za japanski, korejski i kineski te rezervni ćirilični font za ruski trebali su svaki svoj prolaz.

Igre su Idle Ronin: Cyber RPG, Idle Summoner: Pixel RPG, Block Brain i Idle AI Factory: Robot Tycoon, sve besplatne na Google Playu.

Sve vijesti

Sve vijesti