package echomeet const ( MaxShortAudioProcess = 10 MaxLongAudioProcess = 10 MaxAIAwaitProcess = 10 TaskTypeShortAudioAwait = "Echomeet:short_audio_await" TaskTypeShortAudioProcess = "Echomeet:short_audio_process" TaskTypeAIAwait = "Echomeet:ai_await" TaskTypeAIAwaitProcess = "Echomeet:ai_process" // TranscribeQueryMinInterval 主动查询第三方转写服务的最小间隔(秒) TranscribeQueryMinInterval int64 = 10 // TranscribePollConcurrency 轮询第三方查询的并发度,避免 for 串行被单条慢请求拖住整轮 TranscribePollConcurrency = 10 ) // toByteDanceLang 将内部 BCP-47 语言码转换为字节跳动 audomodel 支持的格式。 // 不在支持列表内返回空字符串,调用方应路由到其他引擎。 var bcp47ToByteDance = map[string]string{ "": "", "zh-CN": "zh", "zh-TW": "zh", "zh-HK": "zh", "en-US": "en-US", "en-GB": "en-US", "ja-JP": "ja-JP", "ko-KR": "ko-KR", "id-ID": "id-ID", "es-MX": "es-MX", "es-ES": "es-MX", "pt-BR": "pt-BR", "pt-PT": "pt-BR", "de-DE": "de-DE", "fr-FR": "fr-FR", "fil-PH": "fil-PH", "ms-MY": "ms-MY", "th-TH": "th-TH", "ar-SA": "ar-SA", } func toByteDanceLang(bcp47 string) (lang string, supported bool) { lang, supported = bcp47ToByteDance[bcp47] return } // toDashScopeLang 将内部 BCP-47 语言码转换为 DashScope Paraformer-v2 支持的 language_hints 格式。 // 返回空字符串表示该语言不传 hints,由 DashScope 自动检测。 var bcp47ToDashScope = map[string]string{ "zh-CN": "zh", "zh-TW": "zh", "zh-HK": "zh", "yue-HK": "yue", "en-US": "en", "en-GB": "en", "ja-JP": "ja", "ko-KR": "ko", "ru-RU": "ru", "ru-UA": "ru", "vi-VN": "vi", "tr-TR": "tr", "pl-PL": "pl", "nl-NL": "nl", "it-IT": "it", "uk-UA": "uk", "de-DE": "de", "fr-FR": "fr", "es-ES": "es", "es-MX": "es", "pt-BR": "pt", "pt-PT": "pt", "ar-SA": "ar", "id-ID": "id", "ms-MY": "ms", "th-TH": "th", "fil-PH": "fil", } // toDashScopeLang 返回 DashScope language_hints 值,空字符串表示自动检测 func toDashScopeLang(bcp47 string) string { return bcp47ToDashScope[bcp47] // 不在 map 中自动返回 "" } // ============== 翻译平台语言码转换 ============== // 输入统一是客户端的 BCP-47 码(如 zh-CN / en-US / ja-JP); // 每个平台有自己的接受格式,逐家做映射。未识别一律返回原值,让平台自己决定是否报错, // 绝对不要 fallback 成 "zh"——那会让"未知语言→中文"出现在调用栈深处难以发现。 // 火山翻译 / 阿里 MT:短码 zh / en / ja / ... var bcp47ToShortLang = map[string]string{ "zh-CN": "zh", "zh-TW": "zh", "zh-HK": "zh", "en-US": "en", "en-GB": "en", "ja-JP": "ja", "ko-KR": "ko", "id-ID": "id", "es-MX": "es", "es-ES": "es", "pt-BR": "pt", "pt-PT": "pt", "de-DE": "de", "fr-FR": "fr", "fil-PH": "fil", "ms-MY": "ms", "th-TH": "th", "ar-SA": "ar", "ru-RU": "ru", "ru-UA": "ru", "vi-VN": "vi", "tr-TR": "tr", "pl-PL": "pl", "nl-NL": "nl", "it-IT": "it", "uk-UA": "uk", } // 火山翻译:BCP-47 → 短码(zh / en / ja ...) func toByteDanceTranslateLang(bcp47 string) string { if v, ok := bcp47ToShortLang[bcp47]; ok { return v } return bcp47 } // 阿里 MT:与火山相同的短码体系 func toAliTranslateLang(bcp47 string) string { if v, ok := bcp47ToShortLang[bcp47]; ok { return v } return bcp47 } // Google Cloud Translation:直接接受 BCP-47(en / en-US / zh-CN 都支持),原样透传 func toGoogleTranslateLang(bcp47 string) string { return bcp47 } // Azure Translator:中文要 zh-Hans / zh-Hant,其他用短 ISO(en / ja / ko ...) var bcp47ToMicrosoft = map[string]string{ "zh-CN": "zh-Hans", "zh-TW": "zh-Hant", "zh-HK": "zh-Hant", "en-US": "en", "en-GB": "en", "ja-JP": "ja", "ko-KR": "ko", "id-ID": "id", "es-MX": "es", "es-ES": "es", "pt-BR": "pt", "pt-PT": "pt", "de-DE": "de", "fr-FR": "fr", "fil-PH": "fil", "ms-MY": "ms", "th-TH": "th", "ar-SA": "ar", "ru-RU": "ru", "ru-UA": "ru", "vi-VN": "vi", "tr-TR": "tr", "pl-PL": "pl", "nl-NL": "nl", "it-IT": "it", "uk-UA": "uk", } func toMicrosoftTranslateLang(bcp47 string) string { if v, ok := bcp47ToMicrosoft[bcp47]; ok { return v } return bcp47 } // isByteDanceSupported 判断 BCP-47 语言是否被字节跳动支持 func isByteDanceSupported(bcp47 string) bool { _, ok := bcp47ToByteDance[bcp47] return ok }