Statyczny blog, który sam tłumaczy swoje adresy URL na osiem języków

/ Artykuł

Tłumaczenie maszynowe. Przeczytaj angielski oryginał: A static blog that translates its own URLs into eight languages →

To pierwszy post, więc może od razu wyjaśnić, jak działa maszyna, która go opublikowała. Cała strona to statyczne pliki. Żadnego serwera, żadnej bazy danych, niczego do utrzymywania.

Pisanie posta

Wrzuć plik markdown do src/content/blog/en/. Nazwa pliku staje się URL-em, więc how-i-removed-greptile.md publikuje się pod /blog/how-i-removed-greptile. Frontmatter jest krótki:

---
title: How I removed Greptile
description: One sentence for search results and social cards.
pubDate: 2026-08-07
tags: [tooling, code-review]
---

Ustaw draft: true, dopóki pracujesz. Wersje robocze renderują się w npm run dev, ale nie wchodzą do buildu.

Tłumaczenie

Gdy post trafia na main, GitHub Action wysyła go do DeepSeek V4 Flash i zapisuje osiem tłumaczeń z powrotem do repo jako zwykłe pliki markdown. Slug też jest tłumaczony, więc turecka wersja tego posta żyje pod tureckim URL-em, a nie angielskim z doklejonym prefiksem /tr.

Każdy przetłumaczony plik zapisuje hash angielskiego źródła, z którego powstał. Przy następnym uruchomieniu posty, których hash się zgadza, są pomijane, więc edycja jednego posta tłumaczy jeden post, a nie całe archiwum.

Warstwa Wybór
Framework Astro, statyczny output
Hosting Cloudflare Workers static assets
Tłumaczenie DeepSeek V4 Flash na Fireworks
Treść Markdown w git

Deployment

Merge do main uruchamia proces tłumaczenia, commituje zmiany, buduje i wdraża. Build trwa kilka sekund, a wynikiem jest folder z HTML-em.

Najfajniejszą właściwością statycznej strony jest to, że tryby awarii są nudne. Nic nie może się wyłożyć o 3 w nocy, bo nic nie działa.

Naciśnij T, żeby przełączać między jasnym a ciemnym motywem, a B, A, G lub L, żeby skakać po stronie.