如何设置多域名区域:
multiDomainLocales
选项设置为 true
locales
选项配置为对象数组:
domains
键,其值是您希望为该区域使用的域名数组。可选择性地包含一个端口(如果非标准)和/或一个协议。如果未提供协议,将尝试自动检测,但在某些情况下(例如静态生成的页面)可能无法正确工作。defaultForDomains
键,其值是您希望为该区域使用的默认域名数组。可选择性地包含一个端口(如果非标准)和/或一个协议。如果未提供协议,将尝试自动检测,但在某些情况下(例如静态生成的页面)可能无法正确工作。detectBrowserLanguage
设置为 false
。当启用时(默认情况下是启用的),用户可以在第一次访问时被重定向到不同的域名。如果您希望确保访问特定域名始终显示相应区域的页面,请设置为 false
。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
在构建时使用,所以有必要为不同的环境创建不同的构建。
export const localeDomains = {
uk: process.env.DOMAIN_UK,
fr: process.env.DOMAIN_FR
}
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_UK
和 DOMAIN_FR
。
如果多个域名共享相同的默认语言,可以使用 defaultForDomains
指定它们,支持多个域名。
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'
策略时,相同的请求将会是: