Statyczny blog, który 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 wpis, więc wypada wyjaśnić, jak działa maszyna, która go opublikowała. Cała strona to statyczne pliki — nie ma serwera, bazy danych ani niczego, co trzeba utrzymywać.

Pisanie wpisu

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 finalnego buildu.

Tłumaczenie

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

Każdy przetłumaczony plik przechowuje hash angielskiego źródła, z którego powstał. Przy następnym uruchomieniu wpisy, których hash się zgadza, są pomijane — edycja jednego wpisu powoduje ponowne tłumaczenie tylko tego jednego, a nie całego archiwum.

Warstwa Wybór
Framework Astro, statyczne wyjście
Hosting Cloudflare Workers – zasoby statyczne
Tłumaczenie DeepSeek V4 Flash na Fireworks
Treść Markdown w gicie

Wdrożenie

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

Najfajniejszą cechą statycznej strony jest to, że tryby awarii są nudne. Nic nie może się wysypać o 3 nad ranem, bo nic nie działa.

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