指南

迁移指南

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

nuxtjs/i18n v7.x 升级

不再接受 createI18n 选项的已弃用 vueI18n 选项

此更改旨在确保编译/构建时与运行时之间的稳定性和区分,因为 vue-i18n 在运行时使用。

有关更多详细信息,请参见 GitHub 拉取请求

您可以继续在 i18n.config 中定义 vueI18n 选项。有关如何执行此操作的示例,请参考 Vue i18n基本使用 部分。

更改 pages 选项中的路由键规则

pages 选项中设置的路由键已更改为相对于 Nuxt 中的 pages/ 目录的文件基础,并且 不包括前导 /

原因是更直观地与 Nuxt 的基于文件的路由匹配。

Nuxt2:

pages/
├── about.vue
├── users/
├──── _id/
├────── profile.vue
├── index.vue
nuxt.config.ts
i18n: {
  parsePages: false,
  pages: {
    about: {
      fr: '/a-propos',
    },
    'users/_id/profile': {
      fr: '/u/:id/profil',
    }
  }
}

Nuxt3:

pages/
├── about.vue
├── users/
├──── [id]/
├────── profile.vue
├── index.vue
nuxt.config.ts
i18n: {
  customRoutes: 'config',
  pages: {
    about: {
      fr: '/a-propos',
    },
    'users/[id]/profile': {
      fr: '/u/[id]/profil',
    }
  }
}

已弃用 localeLocation()

使用 localeRoute 替代,适用于选项 API 风格。弃用原因是围绕 Vue Router 的路由解析发生了接口/功能变化。

已弃用 Nuxt 上下文 API 的 localeLocation()

localeLocation() 选项 API 原因相同而被弃用。

已弃用 $nuxtI18nHead()

使用 localeHead() 替代,适用于选项 API 风格。

已弃用 nuxtI18n 组件选项

已被 defineI18nRoute() 编译宏替代,因为它可以通过打包工具进行优化。

Nuxt2:

pages/about.vue
<script>
import Vue from 'vue'

export default Vue.extend({
  nuxtI18n: {
    paths: {
      pl: '/polish'
    }
  }
})
</script>

Nuxt3:

pages/about.vue
<script setup>
defineI18nRoute({
  paths: {
    pl: '/polish'
  }
})
</script>

已弃用 parsePages 选项

使用 customRoutes 选项,因为 parsePages 选项名称不直观。

nuxt.config.ts
 export default defineNuxtConfig({
   modules: [
     '@nuxtjs/i18n'
   ],

   i18n: {
     // ...
-    parsePages: false,
+    customRoutes: 'config',
     // ...
   }
 })

已弃用 vuex 选项

Nuxt i18n 模块不再需要 Vuex,使用 useSetI18nParams 组合式 API 来设置动态路由参数。

nuxt.config.ts
 export default defineNuxtConfig({
   modules: [
     '@nuxtjs/i18n'
   ],

   i18n: {
     // ...
-    vuex: true,
     // ...
   }
 })

有关更多详细信息,请参见 语言切换器

已弃用 sortRoutes 选项

此选项不再必要,因为 Nuxt 3 中的路由不再需要排序。

已弃用 skipNuxtState 选项

此选项不再必要,因为可以用 多文件懒加载 替代,该功能在 v8 中受支持。

已弃用 i18n:extend-messages 钩子

已被 i18n:registerModule 钩子替代,弃用原因如下:

  • 在构建时,指定的本地化资源会被预编译为 JavaScript,这些资源会与 Nuxt 模板一起序列化到运行时上下文,这是不安全的。
  • 巨大的本地化消息影响性能。

替代的 i18n:registerModule 钩子与懒加载翻译的工作方式相同。只有本地化消息的文件信息会被序列化并传递到运行时上下文。通过动态导入加载本地化消息,然后进行懒加载,不会对性能产生负面影响。

有关更多详细信息,请参见 扩展消息钩子

已弃用 vueI18nLoader 选项

此选项不再必要,因为 i18n 自定义块由 unplugin-vue-i18n 默认 支持。

已弃用 onBeforeLanguageSwitchonLanguageSwitched 函数选项

这些函数现在可以通过 Nuxt 运行时钩子触发。请参考 运行时钩子 了解如何使用这些功能。

更改 Nuxt 上下文中的一些导出 API 名称

以下 API 已更改为 $

  • i18n -> $i18n
  • getRouteBaseName() -> $getRouteBaseName()
  • localePath() -> $localePath()
  • localeRoute() -> $localeRoute()
  • switchLocalePath() -> $switchLocalePath()

已弃用 Vuex 中的导出 API

Vuex 扩展 API 已被移除,因为在 Nuxt3 中不再需要 Vuex。

以下 API 不再可用:

  • $i18n
  • getRouteBaseName()
  • localePath()
  • localeRoute()
  • localeLocation()
  • switchLocalePath()