Next.js'de i18n ile Statik ve Dinamik Render
next-intl ile yaşanan sorun
Ne olur?
useTranslations,getTranslationsveya herhangi bir next-intl yardımcı fonksiyonunu Server Component içinde kullandığınızda, Next.js tüm rotayı dinamik olarak işaretler. ([Next Intl][1])Neden? next-intl, mevcut locale'i yalnızca istek başlığı (
x-next-intl-locale) üzerindenheaders()ile okur.headers()dinamik bir API olduğu için, ona dokunan her bileşen statik optimizasyonunu kaybeder. ([Next Intl][1], [Next.js][2])Resmi çözüm (boilerplate)
- Desteklenen her locale için
generateStaticParamsexport edin. - Her layout/page'de
useTranslations'dan öncesetRequestLocale(locale)çağırın. ([Next Intl][1]) Böylece header bağımlılığı kalkar, ancak fazladan kod ve kararsız bir API ile uğraşırsınız.
- Desteklenen her locale için
intlayer ile bu sorun nasıl aşılır?
Tasarım tercihleri
- Sadece route-param – Locale, Next.js'in her sayfaya zaten ilettiği
[locale]URL segmentinden gelir. - Derleme zamanı paketleri – Çeviriler normal ES modülleri olarak import edilir, tree-shake edilir ve derleme zamanında gömülür.
- Dinamik API yok –
useT()React context'ten okur,headers()veyacookies()kullanmaz. - Ekstra yapılandırma yok – Sayfalarınız
app/[locale]/altında olduğunda, Next.js her locale için otomatik olarak bir HTML dosyası üretir.