Nuxt i18n
组合式函数

defineI18nLocale

defineI18nLocale() 组合式函数用于定义一个函数,以动态加载用于懒加载翻译的本地化消息。

defineI18nLocale() 组合式函数用于定义一个函数,以动态加载用于懒加载翻译的本地化消息。

加载器函数需要返回一个解析为消息对象的 Promise

类型

declare function defineI18nLocale<Messages = LocaleMessages<DefineLocaleMessage>, Locales = Locale>(
  loader: (locale: Locales) => Messages | Promise<Messages>
): (locale: Locales) => Messages | Promise<Messages>

参数

loader

一个动态加载本地化消息的函数,具有以下参数:

  • locale
    类型: Locale
    目标 locale,由 nuxt i18n 模块传入。当 locale 在以下情况切换时传入:
    • 当你使用 setLocale() 切换 locale 时。
    • 当通过 <NuxtLink> 切换 locale 时。例如,通过 useSwitchLocalePath()$switchLocalePath() 解析的路由路径。

使用

使用 fetch 请求加载本地化消息的加载器函数示例:

export default defineI18nLocale(locale => {
  return $fetch(`https://your-company-product/api/${locale}`)
})

加载器运行的位置

加载器会在服务器以及浏览器中运行。在生产构建中,服务器会在 Nuxt 应用之外运行它——这正是其消息能够从消息端点提供的原因——因此它只能使用两处都存在的 API,例如 $fetch()useRuntimeConfig()。Nitro 专用 API(h3 工具、useStorage())在浏览器中不可用;在开发环境中也不可用,因为加载器始终在 Nuxt 应用中运行。

Nuxt 应用组合式函数(useNuxtApp()useState()useCookie()useRequestHeaders() 等)是例外:调用其中任意一个的语言文件会使其加载器改为在 Nuxt 应用中运行,并在服务器和客户端上都在那里加载。这是在构建时通过读取语言文件自身所进行的调用来决定的。通过导入的辅助函数调用的组合式函数不会被检测到,并且服务器加载该语言环境时会失败——请在语言文件中直接调用它,以便系统检测到。

i18n/locales/en.ts
export default defineI18nLocale(async locale => {
  // 在 Nuxt 应用中加载,而不是通过消息端点加载
  const { $tenant } = useNuxtApp()
  return $fetch(`/api/messages/${$tenant.id}/${locale}`)
})
此类语言环境的消息会在 SSR 期间按请求生成,并在浏览器中再次生成,同时语言文件也会随客户端 bundle 一起发布。读取仅限服务器端资源(数据库、内部服务)的加载器不得使用这些组合式函数——请确保它能够由服务器加载。
Copyright © 2026