Apps, web, i18n, UI, partners, payouts, backoffice, bariki, prod infra

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
zabudko-ruandClaude Opus 5.5 committed 2026-10-25 22:55:29 +04:00
1 parent 45d7512d2b
commit 3489e0b816
319 files changed
+45483 -121

No files matched your search

+19
View File
@@ -0,0 +1,19 @@
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}` : ''}`);
}