如何在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:
- 在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映射到简体中文 } })
- 检测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
相关产品推荐
相关产品推荐

