From 758e009cf7cf734c61432600dd7a9d3e81d3b560 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Wed, 8 Nov 2023 16:16:32 +0800 Subject: [PATCH] =?UTF-8?q?style:=20=E9=94=99=E8=AF=AF=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E8=8B=B1=E6=96=87=E8=BF=94=E5=9B=9E-ctx=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/utils/parse/parse.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) 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 +}