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.
36 lines (35 loc) • 1.3 kB
JavaScript
import { useLocaleHead } from "../composables/useLocaleHead.js";
import { useRequestURL, useHead, defineNuxtPlugin, useRuntimeConfig, useRoute } from "#imports";
import { watch } from "vue";
import { isMetaDisabledForRoute } from "../utils/route-utils.js";
const host = process.env.HOST ?? "localhost";
const port = process.env.PORT ?? "host";
export default defineNuxtPlugin((nuxtApp) => {
const config = useRuntimeConfig();
const route = useRoute();
const i18nConfig = config.public.i18nConfig;
const currentLocale = nuxtApp.$getLocale?.();
if (isMetaDisabledForRoute(route, i18nConfig.routeDisableMeta, currentLocale)) {
return;
}
const schema = port === "443" ? "https" : "http";
const defaultUrl = port === "80" || port === "443" ? `${schema}://${host}` : `${schema}://${host}:${port}`;
const url = useRequestURL();
const baseUrl = (i18nConfig.metaBaseUrl || url.origin || defaultUrl).toString();
const { metaObject, updateMeta } = useLocaleHead({
addDirAttribute: true,
identifierAttribute: "id",
addSeoAttributes: true,
baseUrl
});
useHead(metaObject);
if (import.meta.server) {
updateMeta();
} else if (import.meta.client) {
watch(
() => useRoute().fullPath,
() => updateMeta(),
{ immediate: true }
);
}
});