import { isLocale } from '@barev/i18n'; import { cookies, headers } from 'next/headers'; import { redirect } from 'next/navigation'; type SearchParams = Promise>; /** Адрес без языка → язык из cookie (выбор на лендинге) или Accept-Language; ?a= и UTM сохраняются */ export async function redirectToLocale(searchParams: SearchParams, path = ''): Promise { 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}` : ''}`); }