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.
39 lines (38 loc) • 1.56 kB
JavaScript
import { isNoPrefixStrategy, isPrefixStrategy } from "nuxt-i18n-micro-core";
import { defineNuxtPlugin, useRuntimeConfig, useRoute, useRouter, navigateTo } from "#imports";
export default defineNuxtPlugin(async (nuxtApp) => {
const config = useRuntimeConfig();
const i18nConfig = config.public.i18nConfig;
const route = useRoute();
const router = useRouter();
const handleRedirect = async (to) => {
const currentLocale = nuxtApp.$getLocale().toString();
const name = to.name?.toString();
let defaultRouteName = name?.toString().replace("localized-", "").replace(new RegExp(`-${currentLocale}$`), "");
if (!to.params.locale) {
if (router.hasRoute(`localized-${name}-${currentLocale}`)) {
defaultRouteName = `localized-${name}-${currentLocale}`;
} else {
defaultRouteName = `localized-${name}`;
}
if (!router.hasRoute(defaultRouteName)) return;
const newParams = { ...to.params };
if (!isNoPrefixStrategy(i18nConfig.strategy)) {
newParams.locale = i18nConfig.defaultLocale;
}
return navigateTo({ name: defaultRouteName, params: newParams }, {
redirectCode: 301,
external: true
});
}
};
if (import.meta.server && (isPrefixStrategy(i18nConfig.strategy) || isNoPrefixStrategy(i18nConfig.strategy))) {
await handleRedirect(route);
}
router.beforeEach(async (to, from, next) => {
if (isPrefixStrategy(i18nConfig.strategy) || isNoPrefixStrategy(i18nConfig.strategy)) {
await handleRedirect(to);
}
next?.();
});
});