From 9d844ed7d4b6f355945d1df46e83863db33bfcaf Mon Sep 17 00:00:00 2001 From: Yun Date: Wed, 10 Jul 2024 17:24:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=8E=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/lang/code.json | 4 +++ example/lang/en.json | 4 +++ example/lang/zh.json | 4 +++ example/main.go | 18 ++++++++++++++ langx.go | 56 +++++++++++++++++++++++++++++++++++++++--- langx_test.go | 12 +++++++++ options.go | 3 ++- 7 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 example/lang/code.json create mode 100644 example/lang/en.json create mode 100644 example/lang/zh.json create mode 100644 example/main.go diff --git a/example/lang/code.json b/example/lang/code.json new file mode 100644 index 0000000..abcf999 --- /dev/null +++ b/example/lang/code.json @@ -0,0 +1,4 @@ +{ + "success":200, + "error":400 +} \ No newline at end of file diff --git a/example/lang/en.json b/example/lang/en.json new file mode 100644 index 0000000..f671b9a --- /dev/null +++ b/example/lang/en.json @@ -0,0 +1,4 @@ +{ + "success":"Success", + "error":"Error #msg#" +} \ No newline at end of file diff --git a/example/lang/zh.json b/example/lang/zh.json new file mode 100644 index 0000000..b38c68a --- /dev/null +++ b/example/lang/zh.json @@ -0,0 +1,4 @@ +{ + "success":"成功", + "error":"失败 #msg#" +} \ No newline at end of file diff --git a/example/main.go b/example/main.go new file mode 100644 index 0000000..8827cdd --- /dev/null +++ b/example/main.go @@ -0,0 +1,18 @@ +package main + +import ( + "fmt" + + "github.com/yuninks/langx" +) + +func main() { + langx.RegisterDir("./lang") + + code, msg := langx.GetTrans("zh", "success", map[string]string{}) + fmt.Println(code, msg) + code, msg = langx.GetTrans("en", "error", map[string]string{ + "msg":"这是失败的原因", + }) + fmt.Println(code, msg) +} diff --git a/langx.go b/langx.go index 672fb27..b364989 100644 --- a/langx.go +++ b/langx.go @@ -2,7 +2,11 @@ package langx import ( "context" + "encoding/json" "fmt" + "io/fs" + "os" + "path/filepath" "strings" ) @@ -16,10 +20,8 @@ var l *langx = &langx{} func init() { - o := defaultOptions() - l = &langx{ - ops: o, + ops: defaultOptions(), codeMap: make(map[string]int), transMap: make(map[string]map[string]string), } @@ -42,6 +44,54 @@ func RegisterTrans(langName string, trans map[string]string) { l.transMap[langName] = trans } + +// 直接读取文件夹获取配置 +// 要求: +// 1.json格式文件 +// 2.code.json为自定义响应码 格式map[string]int{} +// 3.其他的json文件为对应语音 格式map[string]string{} +// 4.如果json解析错误将会panic +func RegisterDir(dir string) error { + // 遍历dir获取.json的文件 + err := filepath.Walk(dir, func(path string, info fs.FileInfo, err error) error { + if info.IsDir() { + return nil + } + if strings.HasSuffix(info.Name(), ".json") { + // 读取文件 + fileName := strings.Replace(info.Name(), ".json", "", 1) + by, err := os.ReadFile(path) + if err != nil { + return err + } + if fileName == "code" { + data := map[string]int{} + err = json.Unmarshal(by, &data) + if err != nil { + return err + } + RegisterCode(data) + } else { + data := map[string]string{} + err = json.Unmarshal(by, &data) + if err != nil { + return err + } + RegisterTrans(fileName, data) + } + } + + return nil + }) + + if err != nil { + panic(err) + } + + // code文件为状态码,其他为对应的语言文件,文件名为语言名 + return nil +} + // 获取翻译 // 包含Code和Message func GetTrans(lang string, key string, format map[string]string) (code int, str string) { diff --git a/langx_test.go b/langx_test.go index d2d0e4f..9675b02 100644 --- a/langx_test.go +++ b/langx_test.go @@ -6,11 +6,23 @@ import ( "github.com/yuninks/langx" ) +const( + Lang string = "s" +) + +var MapCode = map[string]int{ + Lang:200, +} + + func TestLangx(t *testing.T) { langx.InitLangx( langx.SetDefaultCode(0), langx.SetDefaultLanguage("zh"), ) + + + langx.RegisterCode(map[string]int{ "login_success": 200, "error": 400, diff --git a/options.go b/options.go index e4751ca..9433b7e 100644 --- a/options.go +++ b/options.go @@ -18,6 +18,7 @@ func defaultOptions() *options { type Option func(*options) +// 设置默认的code func SetDefaultCode(code int) Option { return func(o *options) { o.defaultCode = code @@ -38,7 +39,7 @@ func SetDefaultLanguage(lang string) Option { } } -// 替换规则 %s 为占位符 +// 替换规则 %s 为占位符 需要填进去 func SetReplaceKey(key string) Option { return func(o *options) { o.replaceKey = key