不同的域名
您可能希望为您的应用支持的每种语言使用不同的域名。要实现这一点:
- 将
differentDomains
选项设置为true
- 将
locales
选项配置为一个对象数组,每个对象都有一个domain
键,其值是您希望为该区域设置使用的域名。可选地包含一个端口(如果非标准)和/或一个协议。如果未提供协议,则将尝试自动检测,但在某些情况下(例如当页面是静态生成时)可能无法正确工作。 - 可选地将
detectBrowserLanguage
设置为false
。启用时(默认为启用),用户在第一次访问时可以被重定向到不同的域名。如果您希望确保访问给定的域名始终显示相应区域的页面,请设置为false
。
nuxt.config.ts
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
// 或只在生产中启用选项
// differentDomains: (process.env.NODE_ENV === 'production')
}
使用不同的域名时,您的语言切换器应使用常规的 <a>
标签:
<a v-for="locale in $i18n.locales" :href="switchLocalePath(locale.code)" :key="locale.code">
{{ locale.code }}
</a>
运行时环境变量
有时需要在不同的环境中更改域名,例如测试和生产。
由于 nuxt.config.js
在构建时使用,因此必须为不同的环境创建不同的构建。
另一种方法是将域名保存在 Vuex 存储中的 localeDomains
属性下。它可以在插件初始化期间访问,从而避免构建多个镜像的麻烦。
config/locale-domains.js
module.exports = {
uk: process.env.DOMAIN_UK,
fr: process.env.DOMAIN_FR
}
nuxt.config.js
const localeDomains = require('./config/locale-domains')
[
'@nuxtjs/i18n',
{
differentDomains: process.env.NODE_ENV === 'production',
locales: [
{
code: 'uk',
domain: localeDomains.uk, // 可选
},
{
code: 'fr',
domain: localeDomains.fr, // 可选
},
],
},
]
store/index.js
const localeDomains = require('~~/config/locale-domains')
export const state = () => ({
localeDomains
})