Nuxt i18n internationalization module for locale routing, lazy-loaded translations, SEO, browser detection, and multi-domain setups. Use when working with @nuxtjs/i18n, locale switching, translated routes, or i18n composables.
62
78%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Passed
No known issues
Map each locale to its own domain:
export default defineNuxtConfig({
i18n: {
differentDomains: true,
locales: [
{ code: 'en', domain: 'mydomain.com' },
{ code: 'es', domain: 'es.mydomain.com' },
{ code: 'fr', domain: 'fr.mydomain.com' }
]
}
})Use <a> tags (not <NuxtLink>) for cross-domain switching:
<template>
<a v-for="loc in availableLocales" :href="switchLocalePath(loc.code)" :key="loc.code">
{{ loc.code }}
</a>
</template>Shared domains — multiple languages on one domain with domainDefault: true:
locales: [
{ code: 'en', domain: 'mydomain.com', domainDefault: true },
{ code: 'pl', domain: 'mydomain.com' },
{ code: 'fr', domain: 'fr.mydomain.com', domainDefault: true }
]Runtime env overrides (no rebuild needed):
NUXT_PUBLIC_I18N_DOMAIN_LOCALES_UK_DOMAIN=uk.example.test
NUXT_PUBLIC_I18N_DOMAIN_LOCALES_FR_DOMAIN=fr.example.testCaching — use cache.varies: ['host'] in route rules to prevent cross-domain cache pollution:
routeRules: {
'/': { swr: 60, cache: { varies: ['host'] } }
}All locales available on all domains, with per-domain defaults:
const i18nDomains = ['mydomain.com', 'es.mydomain.com', 'fr.mydomain.com']
export default defineNuxtConfig({
i18n: {
multiDomainLocales: true,
locales: [
{ code: 'en', domains: i18nDomains, defaultForDomains: ['mydomain.com'] },
{ code: 'es', domains: i18nDomains, defaultForDomains: ['es.mydomain.com'] },
{ code: 'fr', domains: i18nDomains, defaultForDomains: ['fr.mydomain.com'] },
{ code: 'nl', domains: i18nDomains },
{ code: 'de', domains: i18nDomains }
]
}
})One locale can be default on multiple domains:
{ code: 'en', domains: i18nDomains, defaultForDomains: ['mydomain.com', 'en.mydomain.com'] }