packages/plugin-i18n/src/utils/detectLocale.ts (30 lines of code) (raw):

import type { I18nConfig } from '../types.js'; import getLocaleFromCookie from './getLocaleFromCookie.js'; import normalizeLocalePath from './normalizeLocalePath.js'; import getPreferredLocale from './getPreferredLocale.js'; interface DetectLocaleParams { locales: I18nConfig['locales']; defaultLocale: I18nConfig['defaultLocale']; pathname: string; disableCookie: boolean; basename?: string; headers?: { [key: string]: string | string[]; }; } export default function detectLocale({ locales, defaultLocale, pathname, basename, disableCookie, headers = {}, }: DetectLocaleParams): string { const detectedLocale = ( normalizeLocalePath({ pathname, locales, basename }).pathLocale || (!disableCookie && getLocaleFromCookie(locales, headers)) || getPreferredLocale(locales, headers) || defaultLocale ); return detectedLocale; }