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.
 
 
 
 
 
 

57 lines
1.7 KiB

package comm
import (
"errors"
"testing"
)
// 2026-09-15 真机实测:客户端 39 个语种里只有 3 个翻不出来,三种不同原因。
// 这组用例把「码怎么归一」钉死,避免又出现「阿里报语种拼写错误、查半天才发现是码错了」。
func TestBCP47ToShortLangProviderCodes(t *testing.T) {
cases := map[string]string{
// ⚠️ 挪威语:客户端按 Azure 语音码传 nb-NO,而阿里认的是 no。
// 取主标签会得到 nb → 阿里回 10033 语种拼写错误。
"nb-NO": "no",
"nn-NO": "no",
// 表里显式收录的
"uk-UA": "uk",
"zh-CN": "zh",
"zh-TW": "zh",
// 没收录的走取主标签兜底
"hr-HR": "hr",
"sv-SE": "sv",
"el-GR": "el",
// 已经是短码的原样返回
"en": "en",
"": "",
}
for in, want := range cases {
if got := BCP47ToShortLang(in); got != want {
t.Errorf("BCP47ToShortLang(%q) = %q, want %q", in, got, want)
}
}
}
// 「语种不支持」重试一万次也没用,必须和「这次调用失败了」分开,
// 否则用户看到「请稍后再试」会一直点。
func TestIsLangUnsupportedErr(t *testing.T) {
unsupported := []error{
errors.New("translate failed: code=10005 msg=translate from source to target not support"),
errors.New("translate failed: code=10033 msg=语种拼写错误"),
}
for _, e := range unsupported {
if !IsLangUnsupportedErr(e) {
t.Errorf("应判为「语种不支持」: %v", e)
}
}
transient := []error{
errors.New("translate request: dial tcp: i/o timeout"),
errors.New("translate failed: code=Throttling.User msg=flow control"),
nil,
}
for _, e := range transient {
if IsLangUnsupportedErr(e) {
t.Errorf("不该判为「语种不支持」(这些重试有意义): %v", e)
}
}
}