v2.5.2
Giriş yap

Next.js Routing

emirhankayabas
222 defa görüntülendi

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ı.

Cevap yaz
Cevaplar (2)
mrtanner
66 gün önce

Yanlış anlamadıysam senin istediğin şey 'Parallel Routes' oluyor.
Daha önce kullanmadım o yüzden bilgi veremeyeceğim ama şuradan detaylarına bakabilirsin.

https://nextjs.org/docs/app/building-your-application/routing/parallel-routes
ebykdrms
92 gün önce

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.