You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.5 KiB
53 lines
1.5 KiB
package comm
|
|
|
|
import "strings"
|
|
|
|
// 语言码归一:客户端与各服务商用的码不是一套。
|
|
//
|
|
// 客户端一律传 BCP-47(zh-CN / en-US / ja-JP…),而阿里云机器翻译要的是短 ISO 码
|
|
// (zh / en / ja…)。传错格式阿里云不会报错,只会返回空结果或原文,
|
|
// 排查起来非常费劲,所以这里统一收口。
|
|
//
|
|
// 这份表原先在 modules/echomeet 里私有,实时翻译接口也要用,提到 comm 共用。
|
|
|
|
var bcp47ToShort = 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",
|
|
}
|
|
|
|
// BCP47ToShortLang 把 BCP-47 语言码转成短 ISO 码(阿里云机器翻译用)。
|
|
//
|
|
// 表里没有的原样返回:一是客户端可能已经传的就是短码,二是新语种在补表之前
|
|
// 至少还能透传给服务商试一把,比硬变成空串强。
|
|
func BCP47ToShortLang(code string) string {
|
|
c := strings.TrimSpace(code)
|
|
if c == "" {
|
|
return ""
|
|
}
|
|
if v, ok := bcp47ToShort[c]; ok {
|
|
return v
|
|
}
|
|
// 已经是短码(en / zh)或没收录的地区变体(xx-YY):取主语言子标签
|
|
if i := strings.IndexByte(c, '-'); i > 0 {
|
|
return strings.ToLower(c[:i])
|
|
}
|
|
return strings.ToLower(c)
|
|
}
|
|
|