chore: initial commit
This commit is contained in:
66
internal/pkg/validator/validator.go
Normal file
66
internal/pkg/validator/validator.go
Normal file
@@ -0,0 +1,66 @@
|
||||
package validator
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"reflect"
|
||||
|
||||
"github.com/go-playground/locales/zh"
|
||||
ut "github.com/go-playground/universal-translator"
|
||||
"github.com/go-playground/validator/v10"
|
||||
zhtranslations "github.com/go-playground/validator/v10/translations/zh"
|
||||
)
|
||||
|
||||
var (
|
||||
trans ut.Translator
|
||||
validate *validator.Validate
|
||||
)
|
||||
|
||||
func InitValidatorZh() {
|
||||
langZh := zh.New()
|
||||
uni := ut.New(langZh, langZh)
|
||||
var found bool
|
||||
trans, found = uni.GetTranslator("zh")
|
||||
|
||||
if !found {
|
||||
panic("translator 'zh' not found")
|
||||
}
|
||||
|
||||
err := zhtranslations.RegisterDefaultTranslations(validate, trans)
|
||||
if err != nil {
|
||||
panic("failed to register zh translations: " + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
func init() {
|
||||
validate = validator.New()
|
||||
|
||||
// 注册自定义标签名称
|
||||
validate.RegisterTagNameFunc(func(field reflect.StructField) string {
|
||||
name := field.Tag.Get("json")
|
||||
if name == "-" {
|
||||
return ""
|
||||
}
|
||||
return name
|
||||
})
|
||||
|
||||
// 初始化中文翻译器
|
||||
InitValidatorZh()
|
||||
}
|
||||
|
||||
func Translate(err error) []string {
|
||||
var validateErrs validator.ValidationErrors
|
||||
if errors.As(err, &validateErrs) {
|
||||
messages := make([]string, 0, len(validateErrs))
|
||||
for _, e := range validateErrs {
|
||||
messages = append(messages, e.Translate(trans))
|
||||
}
|
||||
return messages
|
||||
}
|
||||
|
||||
// 非校验错误 直接返回
|
||||
return []string{err.Error()}
|
||||
}
|
||||
|
||||
func Struct(s any) error {
|
||||
return validate.Struct(s)
|
||||
}
|
||||
Reference in New Issue
Block a user