Files
BarevClub/apps/landing/lib/redirect.ts
T
2026-10-25 22:55:29 +04:00

20 lines
986 B
TypeScript

import { isLocale } from '@barev/i18n';
import { cookies, headers } from 'next/headers';
import { redirect } from 'next/navigation';
type SearchParams = Promise<Record<string, string | string[] | undefined>>;
/** Адрес без языка → язык из cookie (выбор на лендинге) или Accept-Language; ?a= и UTM сохраняются */
export async function redirectToLocale(searchParams: SearchParams, path = ''): Promise<never> {
const [sp, c, h] = await Promise.all([searchParams, cookies(), headers()]);
const saved = c.get('barev_lang')?.value;
const accepted = (h.get('accept-language') ?? '')
.split(',')
.map((p) => p.split(';')[0]!.trim().split('-')[0]!.toLowerCase())
.find(isLocale);
const locale = isLocale(saved) ? saved : (accepted ?? 'ru');
const qs = new URLSearchParams();
for (const [k, v] of Object.entries(sp)) if (typeof v === 'string') qs.set(k, v);
redirect(`/${locale}${path}${qs.size ? `?${qs}` : ''}`);
}