UNPKG

nuxt-i18n-micro

Version:

Nuxt I18n Micro is a lightweight, high-performance internationalization module for Nuxt, designed to handle multi-language support with minimal overhead, fast build times, and efficient runtime performance.

54 lines (53 loc) 2.37 kB
import { getEnabledLocaleCodes } from "@i18n-micro/utils/active-locales"; import { withoutAppBaseURL } from "@i18n-micro/utils/app-path"; import { getLocaleCookieName } from "@i18n-micro/utils/cookie"; import { resolveServerLocale } from "@i18n-micro/utils/resolve-locale"; import { resolveI18nConfigWithRuntimeOverrides } from "@i18n-micro/utils/runtime-config"; import { defineEventHandler, getCookie, getHeader, getQuery, getRequestURL } from "h3"; import { getI18nPrivateConfig } from "#i18n-internal/config"; import { getI18nConfig } from "#i18n-internal/strategy"; import { useRuntimeConfig } from "#imports"; import { loadTranslationsFromServer } from "../utils/server-loader.js"; export default defineEventHandler(async (event) => { const appBaseURL = useRuntimeConfig(event).app.baseURL; const rawPath = event.path || getRequestURL(event).pathname; const path = withoutAppBaseURL(rawPath, appBaseURL); if (path.startsWith("/api") || path.startsWith("/_nuxt") || path.startsWith("/_locales") || path.startsWith("/__")) return; if (path.includes(".") && !path.endsWith(".html")) return; const config = resolveI18nConfigWithRuntimeOverrides( getI18nConfig(), useRuntimeConfig(event).public ); const privateConfig = getI18nPrivateConfig(); const validLocales = getEnabledLocaleCodes(config.locales); const defaultLocale = config.defaultLocale || "en"; const pathSegments = path.split("/").filter(Boolean); const firstSegment = pathSegments[0]; const hasLocaleInUrl = Boolean(firstSegment && validLocales.includes(firstSegment)); const cookieName = getLocaleCookieName(config); const queryLocale = getQuery(event).locale ? String(getQuery(event).locale) : null; const cookieLocale = cookieName ? getCookie(event, cookieName) : null; const locale = resolveServerLocale({ defaultLocale, validLocales, autoDetectLanguage: config.autoDetectLanguage, hasLocaleInUrl, urlLocale: firstSegment ?? null, queryLocale, cookieLocale, acceptLanguageHeader: getHeader(event, "accept-language") }); let translations = {}; if (privateConfig.serverTranslationPreload) { try { const loaded = await loadTranslationsFromServer(locale, "index"); translations = loaded.data; } catch { translations = {}; } } event.context.i18n = { locale, translations }; });