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.

46 lines (45 loc) 1.66 kB
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); } }); } });