-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtranslations.go
More file actions
93 lines (77 loc) · 2.21 KB
/
translations.go
File metadata and controls
93 lines (77 loc) · 2.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package validator_ext
import (
"errors"
"github.com/go-playground/locales/en"
"github.com/go-playground/locales/zh"
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10"
en_trans "github.com/go-playground/validator/v10/translations/en"
zh_trans "github.com/go-playground/validator/v10/translations/zh"
"strings"
)
var uniTranslator *ut.UniversalTranslator
func RegisterTranslations(validate *validator.Validate) {
eg := en.New()
uniTranslator = ut.New(eg, eg, zh.New())
transEn, _ := uniTranslator.GetTranslator("en")
err := en_trans.RegisterDefaultTranslations(validate, transEn)
if err != nil {
panic(err)
}
transZh, _ := uniTranslator.GetTranslator("zh")
err = zh_trans.RegisterDefaultTranslations(validate, transZh)
if err != nil {
panic(err)
}
registerIsCountryEn(validate, transEn)
registerIsDateEn(validate, transEn)
registerIsDateTimeEn(validate, transEn)
registerMaxLengthEn(validate, transEn)
registerMinLengthEn(validate, transEn)
registerIsMobileEn(validate, transEn)
registerMustInEn(validate, transEn)
registerRegexEn(validate, transEn)
registerIsCountryZh(validate, transZh)
registerIsDateZh(validate, transZh)
registerIsDateTimeZh(validate, transZh)
registerMaxLengthZh(validate, transZh)
registerMinLengthZh(validate, transZh)
registerIsMobileZh(validate, transZh)
registerMustInZh(validate, transZh)
registerRegexZh(validate, transZh)
}
func TranslateError(err error, locale string) map[string]string {
if err == nil {
return nil
}
var errs validator.ValidationErrors
ok := errors.As(err, &errs)
if !ok {
return nil
}
if locale == "" {
locale = "zh"
} else if strings.Contains(locale, "-") {
locale = strings.Split(locale, "-")[0]
}
trans, found := uniTranslator.GetTranslator(locale)
if !found {
locale = "zh"
trans, _ = uniTranslator.GetTranslator(locale)
}
return errs.Translate(trans)
}
func TranslateValidateError(err error, lng string) string {
if err == nil {
return ""
}
transErrors := TranslateError(err, lng)
if len(transErrors) == 0 {
return err.Error()
}
errMsgs := make([]string, 0, len(transErrors))
for _, msg := range transErrors {
errMsgs = append(errMsgs, msg)
}
return strings.Join(errMsgs, "\n")
}