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
JavaScript
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;
};