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.

53 lines (52 loc) 2.07 kB
import { interpolate, useTranslationHelper } from "@i18n-micro/core"; import { detectCurrentLocale } from "./utils/locale-detector.js"; import { useRuntimeConfig } from "#imports"; const I18N_CONTEXT_KEY = "__i18n_cache__"; async function fetchTranslations(locale) { try { const config = useRuntimeConfig(); const i18nConfig = config.i18nConfig; const apiBaseUrl = i18nConfig?.apiBaseUrl ?? "_locales"; const apiBaseServerHost = i18nConfig?.apiBaseServerHost ?? void 0; let url = `/${apiBaseUrl}/general/${locale}/data.json`; if (apiBaseServerHost) { url = `${apiBaseServerHost}${url}`; } const translations = await $fetch(url); return translations; } catch (error) { console.error(`Error loading translation for locale "${locale}":`, error); return {}; } } export const useTranslationServerMiddleware = async (event, defaultLocale, currentLocale) => { if (!event.context[I18N_CONTEXT_KEY]) { event.context[I18N_CONTEXT_KEY] = { generalLocaleCache: {}, routeLocaleCache: {}, dynamicTranslationsCaches: [], serverTranslationCache: {} }; } const requestScopedCache = event.context[I18N_CONTEXT_KEY]; const { getTranslation, loadTranslations, hasGeneralTranslation } = useTranslationHelper(requestScopedCache); const config = useRuntimeConfig(event).public.i18nConfig; const { locales, fallbackLocale, defaultLocale: configDefaultLocale } = config; const locale = currentLocale || detectCurrentLocale(event, { fallbackLocale, defaultLocale: defaultLocale || configDefaultLocale, locales }, defaultLocale); if (!hasGeneralTranslation(locale)) { const translations = await fetchTranslations(locale); await loadTranslations(locale, translations); } function t(key, params, defaultValue) { let translation = getTranslation(locale, "index", key); if (!translation) { translation = defaultValue || key; } return typeof translation === "string" && params ? interpolate(translation, params) : translation; } return t; };