diff --git a/common.go b/common.go new file mode 100644 index 0000000..510a450 --- /dev/null +++ b/common.go @@ -0,0 +1,17 @@ +package langx + +import "context" + +const ctxLangKey string = "ctxLang" + +func SetCtxLang(ctx context.Context, lang string) context.Context { + return context.WithValue(ctx, ctxLangKey, lang) +} + +func GetCtxLang(ctx context.Context) string { + lang, ok := ctx.Value(ctxLangKey).(string) + if !ok { + return "" + } + return lang +} diff --git a/error.go b/error.go index 7abbb4e..4fb5878 100644 --- a/error.go +++ b/error.go @@ -5,10 +5,11 @@ import ( ) type LangError interface { - Error() string // 实现error接口&获取翻译后的错误信息 - GetCode() int // 获取翻译后的Code - GetKey() string // 获取原Key值 - GetFormat() map[string]string // 获取附加数据 + Error() string // 实现error接口&获取翻译后的错误信息 + GetCode() int // 获取翻译后的Code + GetKey() string // 获取原Key值 + GetFormat() map[string]string // 获取附加数据 + SetLang(lang string) // 设置语言 } type langError struct { @@ -17,15 +18,8 @@ type langError struct { format map[string]string } -type errorConst string - -func (e *langError) Error() string { - errLang := e.ctx.Value(errorLang) - l := "" - if errLang != nil { - l = string(errLang.(errorConst)) - } - return GetFormat(l, e.key, e.format) +func (l *langError) Error() string { + return GetFormat(GetCtxLang(l.ctx), l.key, l.format) } func (e *langError) GetCode() int { @@ -43,7 +37,11 @@ func (e *langError) GetFormat() map[string]string { return e.format } -func NewErrorFormat(ctx context.Context, key string, format map[string]string) error { +func (e *langError) SetLang(lang string) { + e.ctx = SetCtxLang(e.ctx, lang) +} + +func NewErrorf(ctx context.Context, key string, format map[string]string) error { return &langError{ ctx: ctx, key: key, @@ -57,9 +55,3 @@ func NewError(ctx context.Context, key string) error { key: key, } } - -const errorLang errorConst = "errorLang" - -func SetCtxLang(ctx context.Context, lang string) context.Context { - return context.WithValue(ctx, errorLang, lang) -} diff --git a/error_test.go b/error_test.go index 60608e1..857d03f 100644 --- a/error_test.go +++ b/error_test.go @@ -40,13 +40,19 @@ func TestError(t *testing.T) { t.Log(val.GetCode()) } - err = langx.NewErrorFormat(ctx, "username", map[string]string{ + err = langx.NewErrorf(ctx, "username", map[string]string{ "name": "yuninks", }) t.Log(err.Error()) val, ok = err.(langx.LangError) if ok { t.Log(val.GetCode()) + + // 设置输出语言 + val.SetLang("en") + } + t.Log(val.Error()) + } diff --git a/example/enample2.go b/example/enample2.go index ad4f45e..4c49a18 100644 --- a/example/enample2.go +++ b/example/enample2.go @@ -33,7 +33,7 @@ func (l Language) Error() error { } func (l Language) Errorf(format map[string]string) error { - return langx.NewErrorFormat(context.Background(), l.String(), format) + return langx.NewErrorf(context.Background(), l.String(), format) } var ( diff --git a/example/lang/code.json b/example/imports/lang/code.json similarity index 100% rename from example/lang/code.json rename to example/imports/lang/code.json diff --git a/example/lang/en.json b/example/imports/lang/en.json similarity index 100% rename from example/lang/en.json rename to example/imports/lang/en.json diff --git a/example/lang/zh.json b/example/imports/lang/zh.json similarity index 100% rename from example/lang/zh.json rename to example/imports/lang/zh.json diff --git a/example/main.go b/example/imports/main.go similarity index 100% rename from example/main.go rename to example/imports/main.go diff --git a/example/imports/readme.md b/example/imports/readme.md new file mode 100644 index 0000000..d1093cf --- /dev/null +++ b/example/imports/readme.md @@ -0,0 +1,7 @@ +# 导入资源 + +# 通过embed导入 + +# 通过文件导入 + +# 追加导入 diff --git a/langx.go b/langx.go index 935216a..d115a3e 100644 --- a/langx.go +++ b/langx.go @@ -273,10 +273,9 @@ func GetDefaultLang() string { } func getLangFromCtx(ctx context.Context) string { - ctxVal := ctx.Value(l.ops.ctxLangKey) - lang := l.ops.defaultLang - if ctxVal != nil { - lang = ctxVal.(string) + lang := GetCtxLang(ctx) + if lang == "" { + lang = l.ops.defaultLang } return lang } diff --git a/options.go b/options.go index 1d69fae..ec33529 100644 --- a/options.go +++ b/options.go @@ -4,7 +4,7 @@ type options struct { defaultCode int defaultLang string replaceKey string - ctxLangKey string + // ctxLangKey string } func defaultOptions() *options { @@ -12,7 +12,7 @@ func defaultOptions() *options { defaultCode: 200, defaultLang: "zh", replaceKey: "#%s#", - ctxLangKey: "language", + // ctxLangKey: "language", } } @@ -33,11 +33,11 @@ func SetDefaultCode(code int) Option { } // 从ctx里面获取语言的key -func SetCtxLangKey(key string) Option { - return func(o *options) { - o.ctxLangKey = key - } -} +// func SetCtxLangKey(key string) Option { +// return func(o *options) { +// o.ctxLangKey = key +// } +// } // 默认语言 func SetDefaultLanguage(lang string) Option {