Skip to content

Navigasyon

Bu belge üç konuyu bir arada anlatır: menü linkleri, üst çubuk (header), alt bilgi (footer). Ayrı sayfa yok; hepsi birbirine bağlı.

Layout özeti: Site Layout. Yeni sayfa URL’si: Sayfa Ekle / Kaldır. Fix UI butonları: Fix UI Kullanımı.


src/config/nav.ts hem header hem footer menüsünü besler. İki ayrı liste vardır ama genelde aynı maddeleri tekrarlar — biri güncellenip diğeri unutulmasın diye bilinçli kopya değil, aynı yapı kullanılır.

Her öğe:

type NavItem = {
label: LS; // common.nav.* — 4 dil
href: LS; // siteHref(sitePages.xxx) — 4 dil URL
};

siteHref() routes.ts içindeki sitePages path’lerini href objesine çevirir.

header: [
{ label: common.nav.home, href: siteHref(sitePages.home) },
{ label: common.nav.blog, href: siteHref(sitePages.blog) },
{ label: common.nav.contact, href: siteHref(sitePages.contact) },
],
footer: [ /* aynı üç madde */ ],

Contact örneği: tıklanınca locale’e göre /contact, /tr/iletisim, /de/kontakt veya /fr/contact gider.

  1. routes.tssitePages altında yeni pageId ve 4 path
  2. Sayfa dosyalarıSayfa Ekle / Kaldır
  3. nav.tsheader ve footer’a satır: siteHref(sitePages.yeniSayfa)
  4. i18n/common.tscommon.nav.yeniSayfa için ls('...', '...', '...', '...')

Menü metni nav.ts içinde yazılmaz; t(item.label, locale) ile common.nav okunur.


Dosya: src/components/layout/Header.astro

ParçaKaynak
Logo görselisite.tslogo
Marka adısite.tsname
Logo linkigetHomePath(locale)
Menünav.header
TemaThemeToggle (React, client:load)
DilLanguageSwitcher + pageId
  • sticky top-0 z-50 — kaydırınca üstte kalır
  • max-w-6xl mx-auto px-4 — içerik genişliği header ile hizalı
  • border-b border-border — alt çizgi

Görünümü değiştirmek için Header’daki sınıfları düzenleyin; sayfa dosyalarına taşımayın.

Header’da yalnızca mevcut ThemeToggle kullanılır. Layout’ta veya sayfada ikinci bir tema butonu icat etmeyin — Font & UI Kullanımı.

const pageId = getPageIdFromPathname(Astro.url.pathname);
// ...
<LanguageSwitcher pageId={pageId} />

pageId, resolvePath ile routes.ts eşleşmesinden gelir. Contact sayfasında doğru kalır — ayrıntı: Sayfa Ekle / Kaldır.

Blog yazı sayfasında varsayılan home olabilir; yazı çevirisi için alternatePathsSEO / Meta.


Dosya: src/components/layout/Footer.astro

  1. Markasite.name (logo metni)
  2. Hızlı linklernav.footer (header ile aynı nav.ts kaynağı)
  3. İletişim + sosyal

src/config/contact.ts:

  • tel:contact.phone
  • mailto:contact.email (footer’da CTA metni common.footer.emailCta)
  • Adres özeti → contact.address.city, country

Contact sayfası da aynı config’i okur; footer ile tutarlı kalır — Site Bilgileri.

src/config/social.tslinkedin, x, instagram vb.

Footer yalnızca dolu URL olanları listeler:

const socialEntries = Object.entries(social).filter(([, url]) => url);

Boş string → ikon/satır yok.

src/i18n/common.tscommon.footer.*:

  • quickLinks, contactHeading, emailCta, rights

Çeviri operasyonu: Çeviri Metinleri.


Neyi değiştirirsinNeredeNe olur
Menüde yeni sayfaroutes.ts + sayfalar + nav.ts + common.navHeader ve footer’da link
Menü sırasınav.ts dizisi sırasıLink sırası (her iki menüde)
Menü etiketicommon.ts nav.*4 dilde görünen metin
Logo / site adısite.tsHeader logo + footer marka
Üst bar sticky / blurHeader.astro TailwindTüm sayfalarda header
Footer telefoncontact.tsFooter + Contact sayfası
Sosyal profilsocial.ts (URL dolu)Footer’da yeni link
Footer başlık metnicommon.footer.*4 dilde alt bilgi metinleri
Tema butonuThemeToggle / Fix UIGlobal — sayfaya dokunmayın

  • Header ve footer link listelerini farklı dosyalarda tutmayın (nav.ts tek kaynak).
  • nav.ts içine düz metin yazmayın — common.nav + t().
  • Footer’da iletişimi sayfadan kopyalamayın — contact.ts.
  • Her sayfada LanguageSwitcher tekrarlamayın.


Menü nav.ts + routes.ts + common.nav. Header: logo (site.ts), menü, ThemeToggle, LanguageSwitcher (pageId). Footer: nav.footer, contact.ts, dolu social.ts, common.footer. Contact menüde canlı örnek.