diff --git a/src/framework/utils/parse/parse.go b/src/framework/utils/parse/parse.go index ff8145c0..93ae2d44 100644 --- a/src/framework/utils/parse/parse.go +++ b/src/framework/utils/parse/parse.go @@ -165,3 +165,33 @@ func Color(colorStr string) *color.RGBA { A: 255, // 不透明 } } + +// AcceptLanguage 解析 Accept-Language 头部并返回语言标签及其对应的权重值 +// "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" +func AcceptLanguage(acceptLanguage string) string { + language := "en" + maxQ := 0.0 + for _, tag := range strings.Split(acceptLanguage, ",") { + parts := strings.Split(strings.TrimSpace(tag), ";q=") + lang := parts[0] + if strings.Contains(lang, "-") { + langParts := strings.Split(strings.TrimSpace(lang), "-") + lang = langParts[0] + } + q := 0.0 // 默认权重值 + if len(parts) > 1 { + // 解析权重值 + qValue := parts[1] + _, err := fmt.Sscanf(qValue, "%f", &q) + if err != nil { + q = 0.0 // 若解析失败,则使用默认值 + } + } + // 取最大 + if q > maxQ { + maxQ = q + language = lang + } + } + return language +}