[ BLOG // 2026-07-01 // 2 MIN ]

Detekce jazyka podle lokace — bez serveru, na statickém webu

Jak jsem na portfoliu přidal automatické přepnutí jazyka podle časového pásma a jazyka prohlížeče — kompletně na klientovi, bez API, bez zpoždění.

PROJEKTY I18NASTROSTATIC SITEJAVASCRIPT

Můj portfoliový web je postavený v Astro a je plně statický — žádný server-side rendering, žádné API na pozadí. Problém: když někdo z Česka otevře web, dostane anglickou verzi. Když někdo ze zahraničí, dostane češtinu. Obojí je špatně.

Řešení mělo být jednoduché — detekovat jazyk automaticky a přesměrovat, ale jen jednou a bez blikání.

Jak to funguje

Celý detekční mechanismus běží jako inline <script> přímo v <head>, spustí se před vykreslením stránky:

  1. Priorita: manuální volba. Pokud uživatel kliknul na přepínač jazyka, uloží se do localStorage. Tahle hodnota má vždycky nejvyšší prioritu — nikdy ji nepřepíšeme.

  2. Jednorázový redirect. V sessionStorage si hlídáme, jestli už jsme v této session přesměrovali. Pokud ano, děláme nic — žádné ping-pong smyčky.

  3. Detekce přes časové pásmo. Intl.DateTimeFormat().resolvedOptions().timeZone nám zdarma řekne, jestli je uživatel v Praze. Žádná geolokační API, žádný třetí strana, nula nákladů.

  4. Fallback: jazyk prohlížeče. Pokud není v Praze, podíváme se na navigator.languages. Pokud tam má „cs”, bereme to jako českého uživatele.

  5. Přesměrování přes location.replace(). Ne assign() — replace() nepřidává záznam do historie, takže tlačítko „Zpět” funguje správně.

Proč tohle řešení

Alternativa by byla server-side detekce (Cloudflare Workers, nginx rule, atd.), ale to znamená další konfiguraci, další místo, kde se něco může rozbít, a potenciální problém s SEO (pokud se redirect nedělá správně).

Tahle varianta:

  • Stojí 0 Kč — žádná API, žádná infra
  • Běží před renderem — žádný flash obsahu v jiném jazyce
  • SEO bezpečné — boti nepouští JS, takže vidí původní stránku normálně
  • Respektuje uživatele — manuální výběr jazyka je vždycky svatý

Přepínač jazyka

Když uživatel klikne na přepínač, kromě standardního přesměrování se jeho volba zapíše do localStorage pod klíčem dragocz:lang. Při příští návštěvě auto-detect tuto hodnotu přečte a uživateli nechá jeho volbu — i kdyby byl třeba v zahraničí.

Celkem 3 commity, čistý výsledek

Implementace byla nakonec tři malé commits: přepínač ukládající volbu, inline script pro detekci, a ověření buildu. Celkem necelých 50 řádek JavaScriptu. Žádné závislosti, žádné frameworky, prostě jeden script v layoutu a jeden event listener na přepínači.

Na statickém webu tohle funguje překvapivě dobře. Čistý, rychlý, bez údržby.

// ALL_POSTS
ZPĚT NA BLOG
▸