Skip to content

Vue I11 中的重大变更

废弃传统 API 模式

原因

传统 API 模式是为了与 Vue 2 的 v8 兼容的 API 模式。当 v9 发布时,提供了传统 API 以平滑地从 v8 迁移到 v9。

由于之前的 vue-i18n 版本已经提供了以下支持,传统 API 模式将在 v11 中被废弃:

为了兼容性,传统 API 模式在 v11 中仍然有效,但在 v12 中将被完全移除,因此在该版本之后传统 API 模式将不再可用。

废弃自定义指令 v-t

原因

v-t 的优势在于它可以使用 vue 编译器转换和 vue-i18n-extension 的预翻译来优化性能。

此功能在 Vue 2 中得到支持。 详情请见博客文章:https://medium.com/@kazu_pon/performance-optimization-of-vue-i18n-83099eb45c2d

在 Vue 3 中,由于组合 API 的出现,vue-i18n-extension 的预翻译现在仅限于全局作用域。

此外,Vue 3 虚拟 DOM 优化已引入,而由 vue-i18n-extension 提供的优化效果不再显著。我们需要为 SSR 设置,使用 v-t 的好处已经消失。而且使用带有 v-t 的模板的开发者体验并不好。自定义指令在编辑器中不支持键补全(例如 VSCode)。

为了兼容性,v-t 模式在 v11 中仍然有效,但在 v12 中将被完全移除,因此在该版本之后 v-t 将不再可用。

迁移方法

你可以使用 eslint-plugin-vue-i18n

eslint-plugin-vue-i18n 具有 @intlify/vue-i18n/no-deprecated-v-t 规则。https://eslint-plugin-vue-i18n.intlify.dev/rules/no-deprecated-v-t.html

在升级到 vue-i18n v11 之前,你必须先使用 eslint 进行迁移。

移除传统 API 模式下的 tc$tc

原因: 这些 API 在 v11 中警告即将被移除。文档说明,https://vue-i18n.intlify.dev/guide/migration/breaking10.html#deprecate-tc-and-tc-for-legacy-api-mode