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.

60 lines (59 loc) 2.26 kB
import { interpolate } from "@i18n-micro/core"; import { getEnabledLocales } from "@i18n-micro/utils/active-locales"; import { resolveI18nConfigWithRuntimeOverrides } from "@i18n-micro/utils/runtime-config"; import { getI18nConfig } from "#i18n-internal/strategy"; import { useRuntimeConfig } from "#imports"; import { detectCurrentLocale } from "./locale-detector.js"; import { loadTranslationsFromServer } from "./server-loader.js"; const I18N_CONTEXT_KEY = "__i18n_translations__"; export const useTranslationServerMiddleware = async (event, defaultLocale, currentLocale) => { const config = resolveI18nConfigWithRuntimeOverrides( getI18nConfig(), useRuntimeConfig(event).public ); const { locales, fallbackLocale, defaultLocale: configDefaultLocale } = config; const locale = currentLocale || event.context.i18n?.locale || detectCurrentLocale( event, { fallbackLocale, defaultLocale: defaultLocale || configDefaultLocale, locales: getEnabledLocales(locales), localeCookie: config.localeCookie, autoDetectLanguage: config.autoDetectLanguage }, defaultLocale ); if (!event.context[I18N_CONTEXT_KEY]) { let translations2; if (event.context.i18n?.translations && Object.keys(event.context.i18n.translations).length > 0) { translations2 = event.context.i18n.translations; } else { const { data } = await loadTranslationsFromServer(locale, "index"); translations2 = data; } event.context[I18N_CONTEXT_KEY] = translations2; } const translations = event.context[I18N_CONTEXT_KEY]; function t(key, params, defaultValue) { let value = translations[key]; if (value === void 0 && key.includes(".")) { const parts = key.split("."); let current = translations; for (const part of parts) { if (current && typeof current === "object" && part in current) { current = current[part]; } else { current = void 0; break; } } value = current; } if (value === void 0 || value === null) { return defaultValue || key; } const str = typeof value === "string" ? value : String(value); return params ? interpolate(str, params) : str; } return t; };