You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在typesafe-i18n中为中文区域设置定义别名?

解决方案

要让typesafe-i18n能把zh-CN/zh-TW映射到你的zh-HanS/zh-HanT,可以通过两种方式实现:

方法一:自定义Accept-Language检测器

自己封装检测器,先替换请求头里的locale标识,再交给官方检测器处理:

import { detectLocale, initAcceptLanguageHeaderDetector } from 'typesafe-i18n/detectors'

const customAcceptLanguageDetector = (headers: Headers) => {
  // 替换请求头中的locale代码
  let acceptLanguage = headers.get('Accept-Language') || ''
  acceptLanguage = acceptLanguage.replace(/zh-CN/g, 'zh-HanS').replace(/zh-TW/g, 'zh-HanT')

  // 构造修改后的请求头
  const modifiedHeaders = new Headers(headers)
  modifiedHeaders.set('Accept-Language', acceptLanguage)

  return initAcceptLanguageHeaderDetector({ headers: modifiedHeaders })
}

// 使用自定义检测器匹配locale
const detectedLocale = detectLocale(
  customAcceptLanguageDetector(request.headers),
  ['en', 'zh-HanS', 'zh-HanT'], // 你的应用支持的locale列表
  'en' // 默认回退locale
)

方法二:配置Locale别名(Fallback规则)

在i18n配置中添加fallback映射,让zh-CN/zh-TW自动指向目标locale:

  1. 在i18n配置文件(如i18n-util.ts)中设置fallback规则:
import { initI18n } from 'typesafe-i18n'
import type { Locales, TranslationFunctions } from './i18n-types'

const i18n = initI18n<Locales, TranslationFunctions>({
  locales: ['en', 'zh-HanS', 'zh-HanT'],
  fallback: {
    'zh-CN': 'zh-HanS',
    'zh-TW': 'zh-HanT',
    'zh': 'zh-HanS' // 可选:将通用zh映射到简体中文
  }
})
  1. 检测locale时,把别名locale加入支持列表:
const detectedLocale = detectLocale(
  initAcceptLanguageHeaderDetector({ headers: request.headers }),
  ['en', 'zh-HanS', 'zh-HanT', 'zh-CN', 'zh-TW', 'zh'],
  'en'
)

// 通过getTranslation自动应用fallback规则,获取对应翻译
const LL = await i18n.getTranslation(detectedLocale)

内容的提问来源于stack exchange,提问作者mkpoli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 04:36:13