Before you read this This article builds on the following topics
- Why Standard i18n Approaches Fail for Technical Blogs Most i18n strategies duplicate or mistranslate. Learn the overlay model: prose-only translation for Markdown blogs at any scale.
- The i18n Foundation: Config, Types, and Route Architecture Build a multilingual SvelteKit blog foundation: locale config, TypeScript types, locale detection, route matcher, and the (locale)/[lang=locale] route group.
- Making the Content Index Locale-Aware Extend the SvelteKit content index with getContent(locale) - marks articles as isFallback when no translation exists, plus +page.svelte for translated routes.
- On-Demand Article Translation with the Claude API Translate SvelteKit markdown articles on first request using the Claude API: API key setup, prose extraction, and server-side rendering.
- Caching Translations with Upstash Redis Cache SvelteKit translations in Upstash Redis: pre-rendered HTML, permanent TTL for complete, 2-hour retry for incomplete, and instant streaming.
First-time translation — this takes about 10–15 seconds.
Future visits will be instant.