nuxt-i18n
升级到 @nuxtjs/i18n
总结:
nuxt-i18n
更改为 @nuxtjs/i18n
beforeLanguageSwitch
被 onBeforeLanguageSwitch
替换NuxtVueI18n
的 typescript 命名空间已被移除seo
选项已被移除$nuxtI18nSeo
已被移除$nuxtI18nHead
的 addDirAttribute
选项默认值已从 true
更改为 false
onlyOnRoot
和 onlyOnNoPrefix
选项已被移除detectBrowserLanguage
默认只在根路径触发syncLocale
和 syncMessages
属性已被移除nuxt-i18n
更改为 @nuxtjs/i18n
卸载旧模块并安装新模块:
npx nuxi@latest module add i18n
在 nuxt.config.js
中更改模块名称:
modules: [
- 'nuxt-i18n'
+ '@nuxtjs/i18n'
]
beforeLanguageSwitch
被 onBeforeLanguageSwitch
替换如果您在模块配置中定义了 beforeLanguageSwitch
选项,或者通过 API 使用它,则需要切换到 onBeforeLanguageSwitch
。
示例更改:
- app.i18n.beforeLanguageSwitch = (oldLocale, newLocale) => {
- // ...
- }
+ app.i18n.onBeforeLanguageSwitch = (oldLocale, newLocale, isInitialSetup, context) => {
+ if (!isInitialSetup) {
+ // ...
+ }
+ }
请注意,在“初始设置”情况下,旧的钩子不会被调用,因此为了保留旧的行为,您可能希望在 isInitialSetup
为 true
时跳过运行钩子的代码。
另请查看 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 文档。
$nuxtI18nHead
的 addDirAttribute
选项默认值已从 true
更改为 false
$nuxtI18nHead
接受的 addDirAttribute
选项的默认值已从 true
更改为 false
。
如果您没有设置 defaultDirection
模块选项,或者没有在您的语言环境上定义 dir
属性,那么您无需执行任何操作。否则,如果您使用 $nuxtI18nHead
,请明确启用 addDirAttribute
,例如 $nuxtI18nHead({ addDirAttribute: true })
。
onlyOnRoot
和 onlyOnNoPrefix
选项已被移除移除的 detectBrowserLanguage.onlyOnRoot
和 detectBrowserLanguage.onlyOnNoPrefix
选项现在合并为一个单一的 detectBrowserLanguage.redirectOn
选项,该选项接受值 'all'
、'root'
或 'no prefix'
。
如果您显式启用了 onlyOnRoot
或 onlyOnNoPrefix
选项,请分别切换为 redirectOn: 'root'
或 redirectOn: 'no prefix'
。
请注意,默认值也已从 all
更改为 root
。
另请参见 detectBrowserLanguage
文档。
detectBrowserLanguage
默认只在根路径触发之前,启用 detectBrowserLanguage
时,模块会尝试检测浏览器的语言环境,而不管访问的路径是什么。 默认情况下不再是这样 - 模块只会在访问根路径时尝试重定向。
为了更好的 SEO,建议保持新的行为开启,但如果您想恢复到以前的行为,则将 redirectOn
设置为 'all'
。
另请查看 浏览器语言检测指南。
syncLocale
和 syncMessages
属性已被移除vuex
模块选项 syncLocale
和 syncMessages
已被移除。
决定这是多余的,因为有另一种通过 API 访问它们的替代方法:
$i18n.locale
访问$i18n.messages
访问