const LOCALE_PREFIX_RE = /^\/([a-z]{2})(\/|$)/; /** * Решает, нужно ли отдать 404 на запрос с префиксом локали в пути. * Блокирует только известную, но выключенную на сайте локаль; пропускает * не-страничные запросы (`/api/`, `/_nuxt/`, `/__nuxt`), пути без префикса, * неизвестные префиксы и случай, когда список локалей ещё не загружен. * `getEnabledCodes` вызывается лениво — только дойдя до известного префикса, * чтобы не дёргать сервис на каждый ассет. * @param path - путь запроса * @param knownNonDefaultCodes - коды поддерживаемых не-дефолтных локалей * @param getEnabledCodes - геттер кодов реально включённых на сайте локалей */ export function isLocaleBlocked( path: string, knownNonDefaultCodes: string[], getEnabledCodes: () => string[], ): boolean { if (path.startsWith('/api/') || path.startsWith('/_nuxt/') || path.startsWith('/__nuxt')) return false; const match = path.match(LOCALE_PREFIX_RE); if (!match) return false; // нет префикса локали (дефолт 'en') — всегда разрешено const localeCode = match[1]; if (!knownNonDefaultCodes.includes(localeCode)) return false; // неизвестный префикс — пусть разбирается Nuxt const enabledCodes = getEnabledCodes(); if (!enabledCodes.length) return false; // данные сайта ещё не загружены — разрешаем всё return !enabledCodes.includes(localeCode); }