API

选项

所有可用于配置 Nuxt I18n 的选项。

vueI18n

  • type: string
  • default: ''

用于此模块内部的 Vue I18n 选项的构建时配置。完整文档见 这里

createI18n() 的配置可以通过配置文件传递。默认情况下,如果未指定,则模块会扫描 i18n.config{.js,.mjs,.ts}

nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@nuxtjs/i18n'],
  i18n: {
    vueI18n: './nuxt-i18n.js' // 自定义路径示例
  }
})

您需要使用 简单对象函数export default

简单对象导出的示例:

export default {
  legacy: false,
  locale: 'en',
  messages: {
    en: {
      welcome: 'Welcome'
    },
    fr: {
      welcome: 'Bienvenue'
    }
  }
}

函数导出的示例:

import en from '../locales/en.json'
import fr from '../locales/fr.yaml'

// 您可以使用 `defineI18nConfig` 来获取传递给 vue-i18n 的选项的类型推断。
export default defineI18nConfig(() => {
  return {
    legacy: false,
    locale: 'en',
    messages: {
      en,
      fr
    }
  }
})
Vue I18n 的 messages 选项应由 简单对象 返回。这将在 nuxt i18n 模块中通过 vue-i18n 消息编译器预编译为 vue-i18n 运行时中的可执行消息。

baseUrl

  • type: string | Function
  • default: ''

用于在 hreflang 标签中作为备用 URL 前缀的后备基本 URL。默认情况下,将使用 VueRouter 的基本 URL,如果不可用,则使用后备 URL。

也可以是一个函数(将传递一个 Nuxt 上下文作为参数),返回一个字符串。根据请求头动态生成基本 URL 时很有用。

此属性还可以使用 runtimeConfig 设置。

在使用 SEO 功能时,设置此选项尤其重要,这时要求生成的 SEO 标签使用完全合格的 URL。

locales

  • type: string[] | LocaleObject[]
  • default: []

您的应用程序支持的语言环境列表。可以是语言代码的数组(['en', 'fr', 'es'])或用于更复杂配置的语言环境对象数组:

[
  { "code": "en", "language": "en-US", "file": "en.js", "dir": "ltr" },
  { "code": "ar", "language": "ar-EG", "file": "ar.js", "dir": "rtl" },
  { "code": "fr", "language": "fr-FR", "file": "fr.js" }
]

使用对象形式时,属性可以是:

code

  • type: string
  • 语言环境的唯一标识符

language

  • type: undefined | string
  • 在使用 SEO 功能时必需
  • 用于 SEO 功能的语言范围,用于使用 detectBrowserLanguage 功能时匹配浏览器语言种类。应使用 IETF 的 BCP47 定义的 语言标签语法,例如:
    • 'en'(英语的 language 子标签)
    • 'fr-CA'(在加拿大使用的法语的 language+region 子标签)
    • 'zh-Hans'(用简体字书写的中文的 language+script 子标签)

file

  • type: null | string | { path: string; cache: string; }
  • 文件名。当从文件加载语言环境消息时,将相对于 langDir 路径解析。

files

  • type: null | string[] | { path: string; cache: string; }[]
  • 定义多个语言环境消息的文件名。当从文件加载语言环境消息时,将相对于 langDir 路径解析。

dir

  • type: null | 'rtl' | 'ltr' | 'auto'
  • dir 属性指定元素和内容的方向,值可以是 'rtl', 'ltr''auto'

domain

  • type: null | string
  • 您希望为该语言环境使用的域名(如果使用则包括端口)。此属性也可以使用 runtimeConfig 设置。在使用 differentDomains 时此属性是必需的。

domains

  • type: null | string[]
  • domain 的数组。当使用 multiDomainLocales 时,此属性是必需的,而一个或多个域具有相同的多个语言环境。

defaultForDomains

  • type: null | string[]
  • (在使用 multiDomainLocales 时可选)
  • 当使用 domains 时,语言环境应为默认语言环境的 domain 数组。

domainDefault

  • type: null | boolean
  • domainDefault 设置为 true,以使每个应成为特定域默认语言环境的语言环境。此属性在使用 differentDomains 时是必需的,而一个或多个域具有多个语言环境。

...

  • 在对象上设置的任何自定义属性将在运行时公开。这可以用于定义用于页面上语言选择器的语言名称。

您可以通过 localeProperties 属性访问当前语言环境的所有属性。当使用代码数组时,它将仅包含 code 属性。

defaultDirection

  • type: string
  • default: ltr

应用程序的默认方向。当未指定 dir 时将使用。

defaultLocale

  • type: string | null
  • default: null

应用程序的默认语言环境。应与定义的 locales 中的某个语言代码匹配。

使用 prefix_except_default 策略时,此处指定的语言环境的 URL 将没有前缀。建议将其设置为某个语言环境,无论选择的策略如何,因为将在导航到不存在的路由时用作后备语言环境。

strategy

  • type: 'no_prefix' | 'prefix_except_default' | 'prefix' | 'prefix_and_default'
  • default: 'prefix_except_default'

路由生成策略。可以设置为以下之一:

  • 'no_prefix': 路由将没有语言环境前缀
  • 'prefix_except_default': 对每个语言环境添加语言环境前缀,但默认语言环境除外
  • 'prefix': 对每个语言环境添加语言环境前缀
  • 'prefix_and_default': 对每个语言环境和默认语言环境添加语言环境前缀

customRoutes

  • type: 'page' | 'config'
  • default: 'page'

是否从页面文件中提取 自定义路径

pages

  • type: object
  • default: {}

如果使用 config 禁用 customRoutes 选项,则模块将查找 pages 选项中的自定义路由。有关使用方法,请参阅 路由

skipSettingLocaleOnNavigate

  • type: boolean
  • default: false

如果为 true,则在导航到新语言环境时将不会设置语言环境。如果您希望在页面过渡结束后再使用 finalizePendingLocaleChange 手动设置语言环境,这很有用。有关更多信息,请参阅 等待页面过渡

defaultLocaleRouteNameSuffix

  • type: string
  • default: 'default'

在生成默认语言环境的路由名称时添加的内部后缀,如果策略为 prefix_and_default。您不需要更改此设置。

routesNameSeparator

  • type: string
  • default: '___'

用于每个语言环境生成的路由名称的内部分隔符。您不需要更改此设置。

rootRedirect

  • type: string | { statusCode: number; path: string; } | null
  • default: null

设置为您想要重定向的用户访问根 URL('/')的路径。接受字符串或具有 statusCodepath 属性的对象。例如:

{
  "statusCode": 301,
  "path": "about-us"
}

lazy

  • type: boolean | LazyOptions
  • default: false

另请参见 惰性加载翻译

是否应惰性加载翻译。如果启用,则 locales 必须是对象数组,每个对象都包含一个 filefiles 键。

惰性加载语言环境消息意味着仅在页面加载时加载当前使用的语言环境的消息(如果与当前语言环境不同,则还包括后备语言环境的消息)。

langDir

  • type: string
  • default: locales

指向包含要加载的翻译文件的目录的相对路径。可以与或不与惰性加载(lazy 选项)一起使用。

该路径相对于项目根目录的 restructureDir 解析(默认是 'i18n')。

绝对路径在生产中将失败(例如 '/locales' 应更改为 'locales''./locales')。

detectBrowserLanguage

  • type: object | boolean

启用浏览器语言检测,以便在访客第一次访问您的网站时自动重定向到其首选语言环境。

另请参见 浏览器语言检测 以获取指南。

请注意,为了更好的 SEO,建议将 redirectOn 设置为 'root'

设置为 false 禁用。

支持的属性:

alwaysRedirect

  • type: boolean
  • default: false

设置为总是重定向到存储在 cookie 中的值,而不仅仅是在第一次访问时。

fallbackLocale

  • type: string | null

如果没有本地化与浏览器的语言环境匹配,则使用此作为后备。

redirectOn

  • type: string
  • default: 'root'

支持的选项:

  • 'all' - 在所有路径上检测浏览器语言环境。
  • 'root' (建议用于提高 SEO) - 仅在网站根路径 ('/') 上检测浏览器语言环境。只有在使用除 'no_prefix' 外的策略时有效。
  • 'no prefix' - 'root'的更宽松变体,将在根路径 ('/')和没有语言环境前缀的路径(例如 '/foo')上检测浏览器语言环境。只有在使用除 'no_prefix' 的策略时有效。

useCookie

  • type: boolean
  • default: true

如果启用,在用户重定向到浏览器首选语言环境后,将设置一个 cookie,以防止后续重定向。设置为 false 则每次都会重定向。

cookieKey

  • type: string
  • default: 'i18n_redirected'

cookie 名称。

cookieDomain

  • type: string | null
  • default: null

设置以覆盖 cookie 的默认域。默认为 网站 的主机。

cookieCrossOrigin

  • type: boolean
  • default: false

当为 true 时,在 cookie 上设置标志 SameSite=None; Secure 以允许跨域使用 cookie(当应用程序嵌入在 iframe 中时需要)。

cookieSecure

  • type: boolean
  • default: false

为 cookie 设置 Secure 标志。

differentDomains

  • type: boolean
  • default: false

当为每个语言环境使用不同的域时,将此设置为 true,启用后,您必须将语言环境配置为对象数组,每个对象包含一个 domain 键。有关更多信息,请参阅 不同域

multiDomainLocales

  • type: boolean
  • default: false

当使用不同域的不同语言环境时,将此设置为 true。如果启用,您必须将语言环境配置为对象数组,每个对象包含 domainsdefaultForDomains 键。有关更多信息,请参阅 多域语言环境

compilation

  • type: object
  • default: { strictMessage: true, escapeHtml: false }

配置设置语言环境消息编译行为的标志。

支持的属性:

strictMessage

  • type: boolean
  • default: true

严格检查语言环境消息是否不包含 HTML 标签。如果包含 HTML 标签,则会抛出错误。

如果您不想抛出错误,则可以通过将其设置为 false 来解决此问题。然而,这意味着语言环境消息可能会导致 XSS 的安全问题。在这种情况下,我们建议将 escapeHtml 选项设置为 true

escapeHtml

  • type: boolean
  • default: false

确定是否在包含语言环境消息时转义 HTML 标签。

如果通过将 strictMessage 设置为 false 来禁用它,我们建议启用此选项。

bundle

  • type: object
  • default: { compositionOnly: true, runtimeOnly: false, fullInstall: true, dropMessageCompiler: false }

配置 nuxt i18n 模块的打包优化。

支持的属性:

compositionOnly

  • type: boolean
  • default: true

是否仅将 vue-i18n API 制作为组合 API。默认情况下,遗留 API 会被 tree-shaken。有关更多详细信息,请参见 这里

如果您想使用 Vue I18n 的遗留 API,必须将 compositionOnly: false请注意,设置此值将禁用 Vue I18n 组合 API。请注意,遗留 API 也可以通过将 Vue I18n 选项设置为 allowComposition: true 在 i18n.config 中以混合方式使用,但这是有限制的。有关详细信息,请参见 这里

runtimeOnly

  • type: boolean
  • default: false

在构建时是否自动使用 Vue I18n 运行时。

启用此选项时,vue-i18n 消息编译器不会被打包。这意味着您将无法通过 fetch 从后端 API 动态获取用于应用程序的语言环境消息,也无法以编程方式组合语言环境消息。也就是说,您必须能够在构建时完全解析语言环境消息

fullInstall

  • type: boolean
  • default: true

是否安装完整的 API、组件等。默认情况下,所有将被安装。如果指定为 false,则内置组件(<i18n-t>, <i18n-d><i18n-n>)和指令(v-t)将不会被安装到 vue 中,而会被 tree-shaken。有关更多详细信息,请参见 这里

dropMessageCompiler

  • type: boolean
  • default: false

在打包时是否 tree-shake 消息编译器。

如果启用此选项,您应检查应用程序中的资源是否使用 nuxt i18n 模块进行预编译。如果您将通过 API 从后端动态加载资源,则启用此选项将不起作用,因为没有消息编译器。

onlyLocales

  • type: string | string[]
  • default: undefined

指定需要包含的语言环境代码,其余会被删除。

如果您有一个代码库(例如 Nuxt Layers)用于多个使用不同语言的类似项目,这可能很有用。

选项的值不会与其他 Nuxt Layers 合并。此选项应仅在最终项目配置中指定。

optimizeTranslationDirective

  • type: boolean
  • default: true

是否通过将其用法转换为 vue-i18n 翻译函数来优化 v-t 指令,使用 SSR 的项目需要启用此功能。

experimental

实验性配置属性是一个具有以下属性的对象:

localeDetector

  • type: string
  • default: ''
  • 指定在服务器端每次请求时调用的语言环境检测器。您需要指定语言环境检测器定义的文件路径。
有关如何定义语言环境检测器的更多详细信息,请参阅 defineI18nLocaleDetector() API

switchLocalePathLinkSSR

  • type: boolean
  • default: false
  • 更改动态路由参数的跟踪和更新方式,从而改善使用 SwitchLocalePathLink 组件时的语言切换器 SSR。

autoImportTranslationFunctions

  • type: boolean
  • default: false
  • 在使用时自动导入/初始化 $t()$rt()$d()$n()$tm()$te() 函数。
此功能依赖于 Nuxt 的自动导入,如果禁用则无法使用。

typedPages

  • type: boolean
  • default: true
  • 生成在组合和配置中使用的路由类型,在启用 Nuxt 的 experimental.typedRoutes 时,该功能默认启用。
此功能依赖于 Nuxt 的 experimental.typedRoutes,如果未启用,则无法使用。

typedOptionsAndMessages

  • type: false | 'default' | 'all'
    • false - 禁用类型生成
    • 'default' - 根据配置的 defaultLocale 生成类型
    • 'all' - 根据所有配置的语言环境生成类型
  • default: false
  • 生成在翻译函数和 vue-i18n 配置中使用的 vue-i18n 和消息类型。可以配置为使用 defaultLocale(性能更好)或所有语言环境生成类型。

generatedLocaleFilePathFormat

  • type: 'absolute' | 'relative'
    • 'absolute' - 语言环境文件和 langDir 路径包含完整的绝对路径
    • 'relative' - 语言环境文件和 langDir 路径被转换为相对于 rootDir
    • 'off' - locale 文件和 langDir 路径在构建时使用,并从最终构建中剥离 - 这将是 v10 中的默认设置,并将完全取代绝对和相对配置。
  • default: 'absolute'
  • 这会改变生成的语言环境文件和 langDir 路径,这些路径在 v9(及以下版本)中默认是绝对的,可能会在生产中暴露敏感路径信息。
更改此设置还会改变通过 useI18n() 返回的 locales 中的路径。

alternateLinkCanonicalQueries

  • type: boolean
  • default: false
  • 是否从备用链接元标签中删除非规范查询参数。

hmr

  • type: boolean
  • default: true
  • 开发模式下用于语言环境消息文件和 vue-i18n 配置的热模块替换。
此功能仅支持使用 vite 的项目。

customBlocks

配置 SFC 的 i18n 自定义块。

支持的属性:

defaultSFCLang

  • type: 'json' | 'json5' | 'yaml' | 'yml'
  • default: 'json'
  • 指定所有内联 i18n 自定义块的内容。有关更多详细信息,请参阅 unplugin-vue-i18n 文档

在内联 i18n 自定义块中指定 lang 属性时,不应用 defaultSFCLang

例如,使用 defaultSFCLang: "yaml"defaultSFCLang: "yml",此自定义块:

<i18n lang="yaml">
en:
  hello: Hello
es:
  hello: Hola
</i18n>

将等效于:

<i18n>
en:
  hello: Hello
es:
  hello: Hola
</i18n>

globalSFCScope

  • type: boolean
  • default: false
  • 是否将所有 SFC 上的 i18n 自定义块包括在全局范围内。有关更多详细信息,请参阅 unplugin-vue-i18n 文档
请注意启用 globalSFCScope: true,您所有的 SFC 中的所有 i18n 自定义块将处于 global 范围。

例如,使用 globalSFCScope: true,此自定义块:

<i18n lang="yaml" global>
en:
  hello: Hello
es:
  hello: Hola
</i18n>

将等效于:

<i18n lang="yaml">
en:
  hello: Hello
es:
  hello: Hola
</i18n>

这与 defaultSFCLang 结合使用,使用 defaultSFCLang: "yaml" 时,以下将等效于以前的示例:

<i18n>
en:
  hello: Hello
es:
  hello: Hola
</i18n>

types

  • type: 'composition' | 'legacy'
  • default: 'composition'

强制使用的 API 风格的类型定义。

  • 设置为 'composition',支持 Vue I18n 和 @nuxtjs/i18n 提供的组合 API 类型,
  • 设置为 'legacy',支持选项 API 类型。
您可能需要运行 nuxi prepare 以更新生成的类型。

debug

  • type: boolean | 'verbose'
  • default: false

是否使用 @nuxtjs/i18n 调试模式。如果为 true'verbose',将输出日志到控制台,将此设置为 'verbose' 还将记录加载的消息对象。

此选项的目的是帮助识别 @nuxtjs/i18n 的任何问题。您不应在生产环境中启用此选项,因为它会对性能产生负面影响。

parallelPlugin

  • type: boolean
  • default: false

将插件设置为 parallel。请参阅 nuxt 插件加载策略

restructureDir

  • type: string
  • default: 'i18n'

可以用于配置解析 i18n 文件所使用的目录。