import { GetServerSideProps } from "next"; import { serverSideTranslations } from "next-i18next/serverSideTranslations"; import { i18n } from "next-i18next.config"; import { getToken } from "next-auth/jwt"; import { prisma } from "../api/db"; const getServerSideProps: GetServerSideProps = async (ctx) => { const acceptLanguageHeader = ctx.req.headers["accept-language"]; const availableLanguages = i18n.locales; const token = await getToken({ req: ctx.req }); if (token) { const user = await prisma.user.findUnique({ where: { id: token.id, }, }); if (user) { return { props: { ...(await serverSideTranslations(user.locale ?? i18n.defaultLocale, ["common"])), }, }; } } const acceptedLanguages = acceptLanguageHeader ?.split(",") .map((lang) => lang.split(";")[0]); let bestMatch = acceptedLanguages?.find((lang) => availableLanguages.includes(lang) ); if (!bestMatch) { acceptedLanguages?.some((acceptedLang) => { const partialMatch = availableLanguages.find((lang) => lang.startsWith(acceptedLang) ); if (partialMatch) { bestMatch = partialMatch; return true; } return false; }); } return { props: { ...(await serverSideTranslations(bestMatch ?? i18n.defaultLocale, ["common"])), }, }; }; export default getServerSideProps;