组合式函数

defineI18nLocaleDetector

defineI18nLocaleDetector() 是一个可组合的函数,用于定义在服务器端检测区域设置的函数,它在每个请求中被调用。

defineI18nLocaleDetector() 是一个可组合的函数,用于定义在服务器端检测区域设置的函数,它在每个请求中被调用。

该函数需要返回一个区域设置字符串。

您可以在区域设置检测函数中使用 @intlify/h3 工具,这些工具是自动导入的。

此可组合函数为实验性。 您需要配置文件路径到 experimental.localeDetector 选项

类型

type LocaleConfig = {
  defaultLocale: Locale
  fallbackLocale: FallbackLocale
}
declare function defineI18nLocaleDetector(
  detector: (event: H3Event, config: LocaleConfig) => string
): (event: H3Event, config: LocaleConfig) => string

参数

detector

一个作为区域设置检测器的函数,具有以下参数:

  • event
  • config
    • 类型: object
    • 从 Nitro 传递来的区域设置配置。
    • 属性:
      • defaultLocale
        • 类型: Locale
        • 此值设置为 Nuxt i18n 的 defaultLocale 选项。如果未设置,则从 Vue I18n 配置(在 vueI18n 选项中设置的 i18n.config 文件)加载的 locale 选项设置。如果这两者都未设置,则使用默认值 'en-US'
      • fallbackLocale
        • 类型: FallbackLocale
        • 此值设置为从 Vue I18n 配置加载的 fallbackLocale 选项(在 vueI18n 选项中设置的 i18n.config 文件)。如果未配置后备区域设置,则默认为 false

用法

区域设置检测器的示例:

// 根据查询参数、cookie、头检测
export default defineI18nLocaleDetector((event, config) => {
  const query = tryQueryLocale(event, { lang: '' })
  if (query) {
    return query.toString()
  }

  const cookie = tryCookieLocale(event, { lang: '', name: 'i18n_locale' })
  if (cookie) {
    return cookie.toString()
  }

  const header = tryHeaderLocale(event, { lang: '' })
  if (header) {
    return header.toString()
  }

  return config.defaultLocale
})