You might want to use a different domain name for each language your app supports. To achieve this:

  • Set differentDomains option to true
  • Configure the locales option as an array of objects, where each object has a domain key whose value is the domain name you'd like to use for that locale. Optionally include a port (if non-standard) and/or a protocol. If the protocol is not provided then an attempt will be made to auto-detect it but that might not work correctly in some cases like when the pages are statically generated.
  • Optionally set detectBrowserLanguage to false. When enabled (which it is by default), user can get redirected to a different domain on first visit. Set to false if you want to ensure that visiting given domain always shows page in the corresponding locale.
nuxt.config.js
export default defineNuxtConfig({  // ...  i18n: {    locales: [      {        code: 'en',        domain: 'mydomain.com'      },      {        code: 'es',        domain: 'es.mydomain.com'      },      {        code: 'fr',        domain: 'fr.mydomain.com'      },      {        code: 'ru',        domain: 'http://ru.mydomain.com'      },      {        code: 'ua',        domain: 'https://ua.mydomain.com'      }    ],    differentDomains: true    // Or enable the option in production only    // differentDomains: (process.env.NODE_ENV === 'production')  },  // ...})

When using different domain names, your lang switcher should use regular <a> tags:

<script setup>const { locale, locales } = useI18n()const switchLocalePath = useSwitchLocalePath()const availableLocales = computed(() => {  return (locales.value).filter(i => i.code !== locale.value)})</script><template>  ...  <a v-for="locale in availableLocales" :href="switchLocalePath(locale.code)" :key="locale.code">    {{ locale.code }}  </a>  ...</template>

Runtime environment variables

Sometimes there's a need to change domains in different environments, e.g. staging and production. As nuxt.config.ts is used at build time it would be necessary to create different builds for different environments.

locale-domains.config.ts
export const localeDomains = {  uk: process.env.DOMAIN_UK,  fr: process.env.DOMAIN_FR}
nuxt.config.ts
import { localeDomains } from './locale-domains.config'export default defineNuxtConfig({  // ...  modules: ['@nuxtjs/i18n'],  // ...  i18n: {    // ...    differentDomains: process.env.NODE_ENV === 'production',    locales: [      {        code: 'uk',        domain: localeDomains.uk,      },      {        code: 'fr',        domain: localeDomains.fr,      }    ],    // ...  }  // ...})