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