Guide

扩展消息钩子

Nuxt 钩子用于扩展您项目中的 i18n 消息。

如果您是 模块作者 并希望该模块为您的项目提供额外的消息,您可以使用 'i18n:registerModule' 钩子将它们合并到正常加载的消息中。

这在您的模块使用翻译内容并且您想提供良好的默认翻译时尤其有用。

在您模块的设置文件中监听 Nuxt 的 'i18n:registerModule' 钩子并注册您的 i18n 配置,这与 懒加载翻译 的配置方式类似。

通过这种方式添加的翻译将在您项目中加载的翻译之后加载,并在扩展层之前加载。

示例:

import { createResolver, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  async setup(options, nuxt) {
    const { resolve } = createResolver(import.meta.url)

    nuxt.hook('i18n:registerModule', register => {
      register({
        // langDir 路径需要解析
        langDir: resolve('./lang'),
        locales: [
          {
            code: 'en',
            file: 'en.json',
          },
          {
            code: 'fr',
            file: 'fr.json',
          },
        ]
      })
    })
  }
})

现在项目可以访问新消息,并可以通过 $t('my-module-example.hello') 使用它们。

这些钩子仅对在 @nuxtjs/i18n 模块之前注册的模块有效。

nuxt.config.ts
import ExampleModule from './my-module-example/module.ts' // 导入您的自定义模块

export default defineNuxtConfig({
  modules: [ExampleModule, '@nuxtjs/i18n']
})
由于模块的消息与项目的消息合并,因此最好为它们加上前缀。主项目的消息 将始终覆盖 模块提供的消息。