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.
46 lines (45 loc) • 1.66 kB
JavaScript
import { isNoPrefixStrategy } from "@i18n-micro/core";
import { resolveI18nConfigWithRuntimeOverrides } from "@i18n-micro/utils/runtime-config";
import { getI18nConfig } from "#build/i18n.strategy.mjs";
import { defineNuxtPlugin, useNuxtApp, useRouter } from "#imports";
const isDev = process.env.NODE_ENV !== "production";
export default defineNuxtPlugin({
name: "i18n-plugin-hooks",
dependsOn: ["i18n-plugin-loader"],
async setup(nuxtApp) {
const getRuntimeConfig = nuxtApp.$getI18nConfig;
const i18nConfig = resolveI18nConfigWithRuntimeOverrides(
typeof getRuntimeConfig === "function" ? getRuntimeConfig() : getI18nConfig()
);
const router = useRouter();
const { $getLocale, $getRouteName } = useNuxtApp();
const i18nHelper = nuxtApp.$i18n?.helper;
if (!i18nHelper) {
if (isDev) {
console.warn("[i18n] Helper is not available. Skipping hooks plugin.");
}
return;
}
const callRegister = async (route) => {
const locale = $getLocale(route);
const routeName = $getRouteName(route);
await nuxtApp.callHook(
// @ts-expect-error i18n:register is custom hook
"i18n:register",
(translations, selectedLocale) => {
void i18nHelper.mergeTranslation(selectedLocale ?? locale, routeName, translations, true);
},
locale
);
};
if (i18nConfig.hooks !== false) {
await callRegister();
}
router.beforeEach(async (to, from) => {
if (i18nConfig.hooks === false) return;
if (to.path !== from.path || isNoPrefixStrategy(i18nConfig.strategy)) {
await callRegister(to);
}
});
}
});