Default language detection via browser language header

This commit is contained in:
Pallavi 2025-08-03 12:21:41 +05:30
parent 84268e484d
commit 3fbfe50e09

View file

@ -1,16 +1,36 @@
'use server';
import {cookies} from 'next/headers';
import {Locale, defaultLocale} from '@/i18n/config';
import {cookies, headers} from 'next/headers';
import {Locale, defaultLocale, locales} from '@/i18n/config';
// In this example the locale is read from a cookie. You could alternatively
// also read it from a database, backend service, or any other source.
const COOKIE_NAME = 'NEXT_LOCALE';
export async function getUserLocale() {
return (await cookies()).get(COOKIE_NAME)?.value || defaultLocale;
export async function getUserLocale(): Promise<Locale> {
const cookieLocale = (await cookies()).get(COOKIE_NAME)?.value;
if (cookieLocale && locales.includes(cookieLocale as Locale)) {
return cookieLocale as Locale;
}
const headerList = await headers();
const acceptLang = headerList.get('accept-language');
if (acceptLang) {
const browserLang = acceptLang.split(',')[0];
const matched = locales.find((locale) =>
browserLang.toLowerCase().startsWith(locale.split('-')[0].toLowerCase())
);
if (matched) {
return matched;
}
}
return defaultLocale;
}
export async function setUserLocale(locale: Locale) {
(await cookies()).set(COOKIE_NAME, locale);
}