From f8ca2034e0a93703da4248e99476d8601b8c8772 Mon Sep 17 00:00:00 2001 From: ayrisdev Date: Thu, 11 Jun 2026 14:05:36 +0300 Subject: [PATCH] kite-menu-lang --- app/MenuClient.tsx | 39 +++++++++++++++--- app/{ => [lang]}/layout.tsx | 21 ++++++++-- app/{ => [lang]}/page.tsx | 24 +++++++----- app/favicon.ico | Bin 15406 -> 15406 bytes implementation_plan.md | 62 +++++++++++++++++++++++++++++ lib/dictionaries.ts | 26 ++++++++++++ proxy.ts | 76 ++++++++++++++++++++++++------------ 7 files changed, 206 insertions(+), 42 deletions(-) rename app/{ => [lang]}/layout.tsx (57%) rename app/{ => [lang]}/page.tsx (67%) create mode 100644 implementation_plan.md create mode 100644 lib/dictionaries.ts diff --git a/app/MenuClient.tsx b/app/MenuClient.tsx index 20f2206..760cfd2 100644 --- a/app/MenuClient.tsx +++ b/app/MenuClient.tsx @@ -2,9 +2,11 @@ import { useEffect, useState, useRef } from "react"; import { motion, AnimatePresence } from "framer-motion"; +import { useRouter, usePathname } from "next/navigation"; import { MenuCategory, MenuItem as MenuItemType } from "@/data/menu"; import { CategoryNav } from "@/components/CategoryNav"; import { MenuItem } from "@/components/MenuItem"; +import { getDictionary } from "@/lib/dictionaries"; export const CATEGORY_ICONS: Record = { "kahvaltiliklar": "🌅", @@ -35,12 +37,23 @@ type SiteSettings = { restaurantName: string } -export default function MenuClient({ initialCategories, siteSettings }: { initialCategories: MenuCategory[], siteSettings: SiteSettings }) { +export default function MenuClient({ initialCategories, siteSettings, lang = "tr" }: { initialCategories: MenuCategory[], siteSettings: SiteSettings, lang?: string }) { const [activeCategoryId, setActiveCategoryId] = useState( initialCategories[0]?.id || "" ); const [selectedItem, setSelectedItem] = useState(null); const sectionRefs = useRef<(HTMLElement | null)[]>([]); + + const router = useRouter(); + const pathname = usePathname(); + const t = getDictionary(lang); + + const switchLanguage = (newLang: string) => { + if (newLang === lang) return; + // Replace the current locale in the pathname + const newPath = pathname.replace(`/${lang}`, `/${newLang}`); + router.push(newPath || `/${newLang}`); + }; useEffect(() => { const observer = new IntersectionObserver( @@ -81,6 +94,22 @@ export default function MenuClient({ initialCategories, siteSettings }: { initia }} /> + {/* Language Switcher */} +
+ + +
+ {/* Dark overlay to make text readable */}
@@ -96,7 +125,7 @@ export default function MenuClient({ initialCategories, siteSettings }: { initia className="text-[10px] tracking-[0.38em] uppercase mb-8 font-sans font-medium" style={{ color: "rgba(255,220,160,1)" }} > - Akyaka · Muğla + {siteSettings.location || t.hero.location}

{/* Logo */} @@ -120,7 +149,7 @@ export default function MenuClient({ initialCategories, siteSettings }: { initia className="text-xs font-sans tracking-wide" style={{ color: "rgba(255,218,168,0.5)" }} > - Akyaka'nın en keyifli menüsü + {t.hero.subtitle}

@@ -203,7 +232,7 @@ export default function MenuClient({ initialCategories, siteSettings }: { initia className="text-[10px] font-sans tracking-[0.3em] uppercase mt-1" style={{ color: "rgba(255,200,130,0.35)" }} > - Akyaka, Muğla + {siteSettings.location || t.hero.location}

- © 2026 KiteBeach Akyaka. Tüm hakları saklıdır. + {t.footer.copyright}

; }>) { + const { lang } = await params; + return ( - - {children} + + + {children} + {/* VPS Panel Analytics */} +