From a0106918f1faeba0498f30a4e082ca41cdd2c793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=94=E5=AD=90?= Date: Thu, 16 Jan 2025 16:51:08 +0800 Subject: [PATCH] =?UTF-8?q?[v1.6.0]=20=E9=87=8D=E6=96=B0=E5=B0=81=E8=A3=85?= =?UTF-8?q?=20Lang?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/lang.go | 99 +++++++++++++++++++++++++++++++++++--------------- utils/parse.go | 41 --------------------- 2 files changed, 69 insertions(+), 71 deletions(-) diff --git a/utils/lang.go b/utils/lang.go index 995b977..ecbfe8b 100644 --- a/utils/lang.go +++ b/utils/lang.go @@ -3,16 +3,54 @@ package utils import ( "fmt" "github.com/spf13/cast" + "strconv" + "strings" ) +var Lang *LangClass + type LangClass struct { Directory string // 语言包目录 Lang string // 当前语言 Mode string // 文件类型 } -// Lang 实例化 -func Lang(model ...LangClass) *LangClass { +func (this *LangClass) Value(key any, args ...any) (result any) { + + // 读取语言包 + bytes := File().Byte(this.Directory + this.Lang + "." + this.Mode) + + if bytes.Error != nil { return } + + text := cast.ToString(key) + + // 解析语言包 + lang := cast.ToStringMap(Json.Decode(bytes.Text)) + + // 获取语言 + result = lang[text] + + // 如果没有找到语言,通过javascript风格获取 + if Is.Empty(result) { + item, err := Json.Get(bytes.Text, text) + if err == nil { result = item } + } + + // 如果没有找到语言,则返回原文 + if Is.Empty(result) { + return fmt.Sprintf(text, args...) + } + + // 如果有参数,则格式化 + if len(args) > 0 { + return fmt.Sprintf(cast.ToString(result), args...) + } + + return +} + +// New 实例化 +func (this *LangClass) New(model ...LangClass) *LangClass { item := new(LangClass) @@ -29,40 +67,41 @@ func Lang(model ...LangClass) *LangClass { return item } -func (this *LangClass) Value(key any, args ...any) (result any) { +type Language struct { + Language string + Quality float64 +} - // 读取语言包 - bytes := File().Byte(this.Directory + this.Lang + "." + this.Mode) +// AcceptLanguage - 解析请求头的 Accept-Language +func (this *LangClass) AcceptLanguage(value any) (string, []Language, error) { - if bytes.Error != nil { - return - } + var hot Language + var items []Language - text := cast.ToString(key) + for _, val := range strings.Split(cast.ToString(value), ",") { - // 解析语言包 - lang := cast.ToStringMap(Json.Decode(bytes.Text)) + params := strings.Split(val, ";") + lang := params[0] + quality := 1.0 - // 获取语言 - result = lang[text] + if len(params) > 1 { + q, err := strconv.ParseFloat(strings.TrimPrefix(params[1], "q="), 64) + if err != nil { + return "", nil, fmt.Errorf("invalid quality value: %v", err) + } + quality = q + } - // 如果没有找到语言,通过javascript风格获取 - if Is.Empty(result) { - item, err := Json.Get(bytes.Text, text) - if err == nil { - result = item + item := Language{ + Language: lang, + Quality : quality, + } + items = append(items, item) + + if len(hot.Language) == 0 || item.Quality > hot.Quality { + hot = item } } - // 如果没有找到语言,则返回原文 - if Is.Empty(result) { - return fmt.Sprintf(text, args...) - } - - // 如果有参数,则格式化 - if len(args) > 0 { - return fmt.Sprintf(cast.ToString(result), args...) - } - - return -} + return hot.Language, items, nil +} \ No newline at end of file diff --git a/utils/parse.go b/utils/parse.go index 39f8b77..00fe311 100644 --- a/utils/parse.go +++ b/utils/parse.go @@ -1,11 +1,9 @@ package utils import ( - "fmt" "github.com/spf13/cast" "net/url" "regexp" - "strconv" "strings" "sync" ) @@ -182,43 +180,4 @@ func (this *ParseClass) Domain(value any) (domain string) { return "" } return URL.Hostname() -} - -type Language struct { - Language string - Quality float64 -} - -// AcceptLanguage - 解析请求头的 Accept-Language -func (this *ParseClass) AcceptLanguage(value string) (string, []Language, error) { - - var hot Language - var items []Language - - for _, val := range strings.Split(value, ",") { - - params := strings.Split(val, ";") - lang := params[0] - quality := 1.0 - - if len(params) > 1 { - q, err := strconv.ParseFloat(strings.TrimPrefix(params[1], "q="), 64) - if err != nil { - return "", nil, fmt.Errorf("invalid quality value: %v", err) - } - quality = q - } - - item := Language{ - Language: lang, - Quality : quality, - } - items = append(items, item) - - if len(hot.Language) == 0 || item.Quality > hot.Quality { - hot = item - } - } - - return hot.Language, items, nil } \ No newline at end of file