diff --git a/langx.go b/langx.go index 4df21a0..672fb27 100644 --- a/langx.go +++ b/langx.go @@ -1,6 +1,7 @@ package langx import ( + "context" "fmt" "strings" ) @@ -24,6 +25,7 @@ func init() { } } +// 设置 func InitLangx(ops ...Option) { for _, opt := range ops { opt(l.ops) @@ -57,6 +59,7 @@ func GetCode(key string) int { return code } +// 获取翻译 func GetMsg(lang string, key string) string { // 找指定语言 str, ok := l.transMap[lang] @@ -78,6 +81,16 @@ func GetMsg(lang string, key string) string { return key } +// 从ctx里面获取语言 +func GetMsgCtx(ctx context.Context, key string) string { + ctxVal := ctx.Value(l.ops.ctxLangKey) + lang := l.ops.defaultLang + if ctxVal != nil { + lang = ctxVal.(string) + } + return GetMsg(lang, key) +} + // 拼接回复 func GetFormat(lang string, key string, arr map[string]string) string { str := GetMsg(lang, key) @@ -87,6 +100,7 @@ func GetFormat(lang string, key string, arr map[string]string) string { return str } +// 获取默认Code func GetDefaultCode() int { return l.ops.defaultCode } diff --git a/options.go b/options.go index c0f5c66..e4751ca 100644 --- a/options.go +++ b/options.go @@ -4,6 +4,7 @@ type options struct { defaultCode int defaultLang string replaceKey string + ctxLangKey string } func defaultOptions() *options { @@ -11,6 +12,7 @@ func defaultOptions() *options { defaultCode: 200, defaultLang: "zh", replaceKey: "#%s#", + ctxLangKey: "language", } } @@ -22,12 +24,21 @@ func SetDefaultCode(code int) Option { } } +// 从ctx里面获取语言的key +func SetCtxLangKey(key string) Option { + return func(o *options) { + o.ctxLangKey = key + } +} + +// 默认语言 func SetDefaultLanguage(lang string) Option { return func(o *options) { o.defaultLang = lang } } +// 替换规则 %s 为占位符 func SetReplaceKey(key string) Option { return func(o *options) { o.replaceKey = key