Guide

多域名区域设置

为多个区域设置多个域名。为您的应用支持的每种语言使用不同的域名。

如何设置多域名区域:

  • multiDomainLocales 选项设置为 true
  • locales 选项配置为对象数组:
    • 每个对象都有一个 domains 键,其值是您希望为该区域使用的域名数组。可选择性地包含一个端口(如果非标准)和/或一个协议。如果未提供协议,将尝试自动检测,但在某些情况下(例如静态生成的页面)可能无法正确工作。
    • 可选择性地为每个对象设置一个 defaultForDomains 键,其值是您希望为该区域使用的默认域名数组。可选择性地包含一个端口(如果非标准)和/或一个协议。如果未提供协议,将尝试自动检测,但在某些情况下(例如静态生成的页面)可能无法正确工作。
  • 可选择性地将 detectBrowserLanguage 设置为 false。当启用时(默认情况下是启用的),用户可以在第一次访问时被重定向到不同的域名。如果您希望确保访问特定域名始终显示相应区域的页面,请设置为 false
nuxt.config.ts
const i18nDomains = ['mydomain.com', 'es.mydomain.com', 'fr.mydomain.com', 'http://pl.mydomain.com', 'https://ua.mydomain.com']

export default defineNuxtConfig({
  i18n: {
    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: 'pl',
        domains: i18nDomains,
        defaultForDomains: ['http://pl.mydomain.com']
      },
      {
        code: 'ua',
        domains: i18nDomains,
        defaultForDomains: ['https://ua.mydomain.com']
      },
      {
        code: 'nl',
        domains: i18nDomains
      },
      {
        code: 'de',
        domains: i18nDomains
      },
    ],
    multiDomainLocales: true
  }
})

运行时环境变量

有时需要在不同的环境中更改域名,例如预发布和生产环境。 因为 nuxt.config.ts 在构建时使用,所以有必要为不同的环境创建不同的构建。

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'

const i18nDomains = [localeDomains.uk, localeDomains.fr]

export default defineNuxtConfig({
  modules: ['@nuxtjs/i18n'],

  i18n: {
    multiDomainLocales: true,
    locales: [
      {
        code: 'uk',
        domains: i18nDomains,
        defaultForDomains: [localeDomains.uk]
      },
      {
        code: 'fr',
        domains: i18nDomains,
        defaultForDomains: [localeDomains.fr]
      }
    ]
  }
})

根据上述配置,必须针对预发布和生产环境运行具有不同的 .env 文件的构建,这些文件指定 DOMAIN_UKDOMAIN_FR

对某些语言使用不同的域名

如果多个域名共享相同的默认语言,可以使用 defaultForDomains 指定它们,支持多个域名。

nuxt.config.js
const i18nDomains = ['mydomain.com', 'en.mydomain.com', 'es.mydomain.com', 'fr.mydomain.com', 'http://pl.mydomain.com', 'https://ua.mydomain.com']

export default defineNuxtConfig({
  // ...
  i18n: {
    locales: [
      {
        code: 'en',
        domains: i18nDomains,
        defaultForDomains: ['mydomain.com', 'en.mydomain.com']
      },
      {
        code: 'es',
        domains: i18nDomains,
        defaultForDomains: ['es.mydomain.com']
      },
      {
        code: 'fr',
        domains: i18nDomains,
        defaultForDomains: ['fr.mydomain.com']
      },
      {
        code: 'pl',
        domains: i18nDomains,
        defaultForDomains: ['http://pl.mydomain.com']
      },
      {
        code: 'ua',
        domains: i18nDomains,
        defaultForDomains: ['https://ua.mydomain.com']
      },
      {
        code: 'nl',
        domains: i18nDomains
      },
      {
        code: 'de',
        domains: i18nDomains
      },
    ],
    strategy: 'prefix',
    multiDomainLocales: true
  },
  // ...
})

根据以上配置,使用 'prefix' 策略,以下请求将会是:

使用 'prefix_except_default' 策略时,相同的请求将会是: