Next.js Routing
Herkese iyi günler. Next.js de şu şekilde bir yapı kurmam lazım.
www.domain.com/tr/urunler
www.domain.com/tr/products
fakat ayrı ayrı sayfa yerine tek bir sayfadan yönetmek istiyorum.
https://next-intl-docs.vercel.app/docs/routing#pathnames bunu buldum fakat ilk defe dil sistemi ile uğraşıyorum, beceremedim bir türlü. GPT'ye sordum onunkidepekolmadı.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (2)
Gerçi ChatGPT sanırım Next.js'in son versiyonlardaki dosya hiyerarşisini henüz bilmiyor ama ChatGPT'nin aşağıda önerdiği yol işe yaramıyor mu?
Eğer www.domain.com/tr/urunler ve www.domain.com/tr/products URL'lerini aynı dosyadan yönetmek istiyorsanız, Next.js ve next-intl kullanarak bu iki farklı yolu tek bir bileşen dosyasına yönlendirebilirsiniz.
Bunu yapmak için next-intl'in sunduğu yönlendirme özelliklerini kullanarak URL'leri yeniden yazabilirsiniz.
Adım Adım Çözüm:
Dosya Yapısı:
İlk olarak, her iki URL'yi de yönetecek dosya yapısını oluşturun. Örneğin, pages/[locale]/products/page.tsx dosyasını oluşturabilirsiniz.
Yönlendirme Yapılandırması:
src/i18n/routing.ts dosyasında defineRouting fonksiyonunu kullanarak yönlendirme yapılandırmasını tanımlayın. Burada, /tr/urunler ve /tr/products URL'lerinin aynı bileşene yönlendirilmesi için pathnames özelliğini kullanacağız.
Yönlendirme Dosyası:
// src/i18n/routing.ts
import { defineRouting } from 'next-intl/routing';
export const routing = defineRouting({
locales: ['tr', 'en'],
defaultLocale: 'tr',
pathnames: {
'/products': {
tr: '/urunler', // "urunler" ve "products" aynı bileşene yönlendirilir
en: '/products'
}
}
});
Bu yapılandırma, /tr/urunler ve /tr/products URL'lerinin her ikisinin de products sayfasına yönlendirilmesini sağlar.
Sayfa Bileşeni:
Artık, tek bir sayfa bileşeniyle her iki URL'yi de yönetebilirsiniz. pages/[locale]/products/page.tsx dosyasını oluşturun:
// pages/[locale]/products/page.tsx
import { useRouter } from 'next/router';
export default function ProductsPage() {
const router = useRouter();
const { locale } = router;
return (
<div>
<h1>{locale === 'tr' ? 'Ürünler' : 'Products'}</h1>
{/* Burada yerel ayara göre farklı içerik veya işlevler gösterebilirsiniz */}
</div>
);
}
Bu örnekte, locale parametresini kullanarak, Türkçe ve İngilizce içerik arasında dinamik olarak geçiş yapabilirsiniz.
Sonuç:
Bu adımları izleyerek, www.domain.com/tr/urunler ve www.domain.com/tr/products URL'lerini aynı bileşen dosyasından yönetebilir ve bu bileşenin içeriğini yerel ayara göre değiştirebilirsiniz. Bu sayede kod tekrarını azaltır ve uluslararasılaştırma süreçlerini daha verimli hale getirirsiniz.