Skip to content

Commit 1dd49b8

Browse files
committed
server side language switching
1 parent 8c58abd commit 1dd49b8

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

app/[lang]/_components/LanguageSwitchButton.tsx

+13-5
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,30 @@
11
import {Language} from "@/app/[lang]/_components/constants";
2+
import {redirect} from "next/navigation"
3+
import {RedirectType} from "next/dist/client/components/redirect";
24

35
const flagFrance = "🇫🇷";
46
const flagUS = "🇺🇸";
57
// const flagFrance = "FR";
68
// const flagUS = "EN";
79

810
const LanguageSwitchButton = ({ params: { lang }, currentPath } : { params: { lang: Language}, currentPath: string}) => {
11+
const languageSwitchHandler = async (currentPath: string, currentLanguage: Language, formData: FormData) => {
12+
'use server';
13+
const oppositeLanguage = currentLanguage === "en-US" ? "fr-FR" : "en-US";
14+
const newPath = currentPath.replace("[lang]", oppositeLanguage);
15+
redirect(newPath, RedirectType.replace);
16+
};
17+
918
const flag = lang === "en-US" ? flagFrance : flagUS;
1019
const oppositeLang = lang === "en-US" ? "fr-FR" : "en-US";
1120
return (
12-
<div className="lt-md:hidden">
13-
<a
21+
<form className="lt-md:hidden" action={languageSwitchHandler.bind(null, currentPath, lang)}>
22+
<button
1423
className="fixed bottom-6 left-8 h-16 w-16 rounded-full bg-white hover:bg-gray-50 text-black flex items-center justify-center shadow-lg text-xl"
15-
href={currentPath.replace("[lang]", oppositeLang)}
1624
>
1725
{flag}
18-
</a>
19-
</div>
26+
</button>
27+
</form>
2028
);
2129
}
2230

next.config.mjs

+4-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ const nextConfig = {
1111
defaultLocale: "en",
1212
localeDetection: true,
1313
},
14-
trailingSlash: true
14+
trailingSlash: true,
15+
experimental: {
16+
serverActions: true,
17+
}
1518
};
1619

1720
export default nextConfig;

0 commit comments

Comments
 (0)