Guide

迁移指南

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

nuxtjs/i18n v7.x 升级

不再支持的 vueI18n 选项,不接受 createI18n 选项

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

有关更多细节,请参见 GitHub Pull request

您可以继续在 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 替代 Options API 风格。弃用的原因是与 Vue Router 中路由解析相关的接口变化。

在 Nuxt 上下文 API 中不再支持 localeLocation()

原因与 localeLocation() Options API 相同。

不再支持的 $nuxtI18nHead()

使用 localeHead() 替代 Options 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 组合函数来设置动态路由参数。

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

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

有关更多细节,请参阅 语言切换器

不再支持的 sortRoutes 选项

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

不再支持的 skipNuxtState 选项

此选项不再必要,因为它可以通过 多个文件懒加载 替代,该功能在 v8 中得到支持。

不再支持的 i18n:extend-messages 钩子

i18n:registerModule 钩子替代,弃用的理由如下:

  • 在构建时,在 nuxt 模块中指定的区域资源被预编译为 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()