3.5 KiB
Next.js App Router Internationalization (i18n) Implementation Plan
Bu plan, uygulamanıza İngilizce (en) ve Türkçe (tr) dil desteğini eklemek için yapılacak mimari değişiklikleri detaylandırmaktadır. Paylaştığınız doküman linki eski "Pages Router" yapısına aitti, ancak bu proje modern "App Router" yapısında olduğu için Next.js'in güncel [lang] tabanlı App Router i18n standartlarını uygulayacağız.
Özet ve Hedefler
[lang]dinamik klasör yapısına geçiş.- Tarayıcı diline göre yönlendirme yapan bir
middleware.tsdosyası. - Veritabanındaki
name/name_trvedescription/description_tralanlarının seçilen dile göre dinamik getirilmesi. - Sabit metinler için basit bir sözlük (dictionary) yapısı kurulması.
- Kullanıcının dili manuel olarak değiştirebileceği şık bir Dil Seçici (Language Switcher) bileşeni.
Important
User Review Required Lütfen aşağıdaki planı inceleyin ve onay verin veya eklenmesini istediğiniz başka bir dil/detay varsa belirtin.
Açık Sorular
Warning
- Varsayılan (default) dili Türkçe (
tr) olarak belirliyorum, uygun mudur?- Dil seçici butonunu ekranın neresinde göstermek istersiniz? (Öneri: Menü navigasyonunun hemen üzerinde veya sayfanın en üstünde sağ köşede)
Önerilen Değişiklikler
Routing ve Middleware
Ana sayfayı ve layout'u çoklu dil yapısına uygun hale getireceğiz.
[NEW] middleware.ts
Uygulamaya gelen istekleri kontrol edip, eğer URL'de /tr veya /en yoksa kullanıcının tarayıcı tercihine veya varsayılan dile (tr) yönlendirecek.
[MODIFY] app/layout.tsx -> app/[lang]/layout.tsx
Layout, artık url'den gelen params.lang değerini alacak ve <html lang={lang}> özelliğini dinamik olarak ayarlayacak.
[MODIFY] app/page.tsx -> app/[lang]/page.tsx
Sayfa, lang parametresine göre çalışacak ve veritabanından verileri çekerken bu dile dikkat edecek.
Veritabanı ve Veri Çekme (Data Fetching)
Mevcut şemada zaten İngilizce ve Türkçe alanlar bulunuyor.
[MODIFY] app/[lang]/page.tsx (İçerik)
getMenuData fonksiyonu güncellenecek:
- Eğer dil
enise:title: cat.name,name: p.name,description: p.description - Eğer dil
trise:title: cat.name_tr,name: p.name_tr,description: p.description_tr
Sabit Metinler (Dictionaries)
Arayüzde veritabanından gelmeyen sabit yazılar için bir sözlük mekanizması kuracağız.
[NEW] lib/dictionaries.ts
İçerisinde "Akyaka'nın en keyifli menüsü", "Tüm hakları saklıdır" gibi metinlerin hem Türkçe hem İngilizce karşılıklarını tutan basit bir sistem oluşturulacak.
Arayüz (UI)
[MODIFY] app/MenuClient.tsx
- Sabit metinler (Header yazıları, Footer yazıları)
dictionariesobjesinden beslenecek şekildepropsolarak alınacak. - Sayfaya (Örneğin sağ üst köşeye veya menü başlıklarının üstüne)
TR / ENdilleri arasında geçiş yapmayı sağlayacak bir buton eklenecek.
Doğrulama Planı (Verification Plan)
- Middleware Testi:
http://localhost:3000/adresine girildiğindehttp://localhost:3000/tradresine otomatik yönlendiriliyor mu? - İngilizce Testi:
http://localhost:3000/enadresine girildiğinde ürünlerin İngilizce isimleri (name) ve açıklamaları (description) geliyor mu? Sabit metinler (Copyright vb.) İngilizceye dönüyor mu? - Dil Değiştirici Testi: UI üzerindeki butonla diller arası geçiş yapıldığında sayfa sorunsuz bir şekilde güncelleniyor mu?