implemented language swicther

This commit is contained in:
2026-04-17 09:52:04 +02:00
parent 66717a2645
commit e7ef30f5a6
7 changed files with 801 additions and 20 deletions
+8 -3
View File
@@ -6,6 +6,8 @@ import { useParams, usePathname } from "next/navigation";
import { CiMenuFries } from "react-icons/ci";
import { IoCloseOutline } from "react-icons/io5";
import LanguageSwitcher from "../ui/LanguageSwitcher";
export default function Header() {
const params = useParams<{ locale?: string }>();
const pathname = usePathname();
@@ -84,7 +86,9 @@ export default function Header() {
))}
</ul>
</nav>
<div className="hidden sm:block font-sans text-base font-light">France</div>
<div className="hidden sm:block">
<LanguageSwitcher />
</div>
<nav className="block sm:hidden">
<button
@@ -140,10 +144,11 @@ export default function Header() {
</nav>
<div
className={`text-brand-beige/80 text-sm font-sans transition-all duration-700 ${showText ? "translate-x-0 opacity-100" : "-translate-x-8 opacity-0"}`}
className={`text-brand-beige/80 text-sm font-sans transition-all duration-700 flex justify-between items-center ${showText ? "translate-x-0 opacity-100" : "-translate-x-8 opacity-0"}`}
style={{ transitionDelay: showText ? "650ms" : "0ms" }}
>
France
<span>Sélection de la langue</span>
<LanguageSwitcher />
</div>
</div>
</div>
+42
View File
@@ -0,0 +1,42 @@
"use client";
import { usePathname, useRouter } from "next/navigation";
import { locales, defaultLocale } from "@/middleware";
export default function LanguageSwitcher() {
const pathname = usePathname();
const router = useRouter();
// Extract the language from the url
const currentLocale = pathname.split('/')[1] || defaultLocale;
const switchLanguage = (newLocale: string) => {
if (currentLocale === newLocale) return;
// Switch language in the url
const segments = pathname.split('/');
segments[1] = newLocale;
const newPath = segments.join('/');
// Redirect user
router.push(newPath);
};
return (
<div className="flex items-center gap-2 font-sans text-xs uppercase tracking-widest text-brand-beige">
{locales.map((language, index) => (
<div key={index}>
<button
onClick={() => switchLanguage(language)}
className={`transition-opacity duration-200 cursor-pointer ${currentLocale === language ? 'opacity-100 font-medium' : 'opacity-40 hover:opacity-70'}`}
aria-label="Passer en français"
>
{language}
</button>
{index < locales.length - 1 && <span className="opacity-20">|</span>}
</div>
))}
</div>
);
}