V7

迁移指南

从一个主要版本升级到另一个版本的指南。

nuxt-i18n 升级到 @nuxtjs/i18n

总结:

模块名称从 nuxt-i18n 更改为 @nuxtjs/i18n

卸载旧模块并安装新模块:

npx nuxi@latest module add i18n

nuxt.config.js 中更改模块名称:

  modules: [
-    'nuxt-i18n'
+    '@nuxtjs/i18n'
  ]
  • 更新代码中可能存在的所有对旧名称的引用。

beforeLanguageSwitchonBeforeLanguageSwitch 替换

如果您在模块配置中定义了 beforeLanguageSwitch 选项,或者通过 API 使用它,则需要切换到 onBeforeLanguageSwitch

示例更改:

-  app.i18n.beforeLanguageSwitch = (oldLocale, newLocale) => {
-    // ...
-  }
+  app.i18n.onBeforeLanguageSwitch = (oldLocale, newLocale, isInitialSetup, context) => {
+    if (!isInitialSetup) {
+      // ...
+    }
+  }

请注意,在“初始设置”情况下,旧的钩子不会被调用,因此为了保留旧的行为,您可能希望在 isInitialSetuptrue 时跳过运行钩子的代码。

另请查看 onBeforeLanguageSwitch 文档

NuxtVueI18n 的 typescript 命名空间已被移除

该模块不再定义或导出全局 NuxtVueI18n typescript 命名空间。现在,所有模块类型都直接导出,并且不通过全局命名空间提供。

如果您在 typescript 代码或 javascript 代码中的 JSDoc 注释中使用了来自全局命名空间的类型,您必须从 @nuxtjs/i18n 模块显式导入该类型。

例如,代替:

/** @type {NuxtVueI18n.LocaleObject} */
const locale = { code: 'en' }

请使用:

/** @type {import('@nuxtjs/i18n').LocaleObject} */
const locale = { code: 'en' }

在某些情况下,导出类型的名称也已更改,请参考 /types/index.d.ts 文件以查看导出类型。

seo 选项已被移除

出于性能原因,模块选项 seo 已被移除。

替代方法是在布局文件中的 head 组件选项中返回 $nuxtI18nHead({ addDirAttribute: true, addSeoAttributes: true })

有关更多详细信息,请参见 SEO 指南

$nuxtI18nSeo 已被移除

用于生成在 Nuxt 的 head 组件选项中使用的元信息的 $nuxtI18nSeo() 函数已被移除。

如果您在代码中使用了 $nuxtI18nSeo,请用 $nuxtI18nHead({ addSeoAttributes: true }) 替换它。

另请查看 SEO 指南$nuxtI18nHead API 文档

$nuxtI18nHeadaddDirAttribute 选项默认值已从 true 更改为 false

$nuxtI18nHead 接受的 addDirAttribute 选项的默认值已从 true 更改为 false

如果您没有设置 defaultDirection 模块选项,或者没有在您的语言环境上定义 dir 属性,那么您无需执行任何操作。否则,如果您使用 $nuxtI18nHead,请明确启用 addDirAttribute,例如 $nuxtI18nHead({ addDirAttribute: true })

onlyOnRootonlyOnNoPrefix 选项已被移除

移除的 detectBrowserLanguage.onlyOnRootdetectBrowserLanguage.onlyOnNoPrefix 选项现在合并为一个单一的 detectBrowserLanguage.redirectOn 选项,该选项接受值 'all''root''no prefix'

如果您显式启用了 onlyOnRootonlyOnNoPrefix 选项,请分别切换为 redirectOn: 'root'redirectOn: 'no prefix'

请注意,默认值也已从 all 更改为 root

另请参见 detectBrowserLanguage 文档

detectBrowserLanguage 默认只在根路径触发

之前,启用 detectBrowserLanguage 时,模块会尝试检测浏览器的语言环境,而不管访问的路径是什么。 默认情况下不再是这样 - 模块只会在访问根路径时尝试重定向。

为了更好的 SEO,建议保持新的行为开启,但如果您想恢复到以前的行为,则将 redirectOn 设置为 'all'

另请查看 浏览器语言检测指南

Vuex syncLocalesyncMessages 属性已被移除

vuex 模块选项 syncLocalesyncMessages 已被移除。

决定这是多余的,因为有另一种通过 API 访问它们的替代方法:

  • 当前使用的语言环境可以通过 $i18n.locale 访问
  • 当前加载的消息可以通过 $i18n.messages 访问