export const LOCALES = ["tr", "en", "de"] as const; export type Locale = (typeof LOCALES)[number]; export const DEFAULT_LOCALE: Locale = "tr"; export const LOCALE_COOKIE = "locale"; export const LOCALE_LABELS: Record = { tr: "TR", en: "EN", de: "DE", }; export function isLocale(value: string): value is Locale { return (LOCALES as readonly string[]).includes(value); } export function matchLocale(acceptLanguage: string | null): Locale { if (!acceptLanguage) { return DEFAULT_LOCALE; } const preferences = acceptLanguage .split(",") .map((part) => { const [range, ...params] = part.trim().split(";"); let q = 1; for (const param of params) { const match = param.trim().match(/^q=([0-9.]+)$/); if (match) { q = Number(match[1]); } } return { range: range.toLowerCase(), q }; }) .sort((a, b) => b.q - a.q); for (const { range } of preferences) { if (range === "*") { return DEFAULT_LOCALE; } const base = range.split("-")[0]; if (isLocale(base)) { return base; } } return DEFAULT_LOCALE; }