Skip to content

Commit 2e994e5

Browse files
committed
Add http translation example
1 parent bae7f6d commit 2e994e5

File tree

1 file changed

+56
-0
lines changed
  • _examples/http-transalations

1 file changed

+56
-0
lines changed

_examples/http-transalations/main.go

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package main
2+
3+
import (
4+
"encoding/json"
5+
"errors"
6+
"github.com/go-playground/locales/en"
7+
"github.com/go-playground/locales/zh"
8+
"github.com/go-playground/locales/zh_Hant"
9+
ut "github.com/go-playground/universal-translator"
10+
"github.com/go-playground/validator/v10"
11+
en_translations "github.com/go-playground/validator/v10/translations/en"
12+
zh_translations "github.com/go-playground/validator/v10/translations/zh"
13+
zh_tw_translations "github.com/go-playground/validator/v10/translations/zh_tw"
14+
"net/http"
15+
"strings"
16+
)
17+
18+
var uni *ut.UniversalTranslator
19+
20+
func main() {
21+
validate := validator.New()
22+
en := en.New()
23+
uni = ut.New(en, en, zh.New(), zh_Hant.New())
24+
25+
validate = validator.New()
26+
enTrans, _ := uni.GetTranslator("en")
27+
en_translations.RegisterDefaultTranslations(validate, enTrans)
28+
zhTrans, _ := uni.GetTranslator("zh")
29+
zh_translations.RegisterDefaultTranslations(validate, zhTrans)
30+
zhHantTrans, _ := uni.GetTranslator("zh_Hant")
31+
zh_tw_translations.RegisterDefaultTranslations(validate, zhHantTrans)
32+
33+
type User struct {
34+
FirstName string `json:"first_name" validate:"required"`
35+
LastName string `json:"last_name" validate:"required"`
36+
}
37+
38+
http.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {
39+
// ... fill user value
40+
var user User
41+
42+
// Header Accept-Language value is en or zh
43+
trans, _ := uni.GetTranslator(strings.Replace(r.Header.Get("Accept-Language"), "-", "_", -1))
44+
if err := validate.Struct(&user); err != nil {
45+
var errs validator.ValidationErrors
46+
var httpErrors []validator.ValidationErrorsTranslations
47+
if errors.As(err, &errs) {
48+
httpErrors = append(httpErrors, errs.Translate(trans))
49+
}
50+
r, _ := json.Marshal(httpErrors)
51+
w.Write(r)
52+
}
53+
})
54+
55+
http.ListenAndServe(":8081", nil)
56+
}

0 commit comments

Comments
 (0)