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
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)
|
|
}
|
|
}
|
|
}
|
|
|