go validator 多语言支持

aababc:

当前我在使用 gin + validator 的过程中,想实现 validator 根据 accept-language 自动切换验证的错误信息,看了一下 validator 的示例代码,感觉完全没有看明白要怎么用?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import (
"fmt"

"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_translations "github.com/go-playground/validator/v10/translations/en"
zh_translations "github.com/go-playground/validator/v10/translations/zh"
)
...
en := en.New()
uni = ut.New(en, zh.New())

// this is usually know or extracted from http 'Accept-Language' header
// also see uni.FindTranslator(...)
trans, _ := uni.GetTranslator("en")

validate = validator.New()
en_translations.RegisterDefaultTranslations(validate, trans)

我按照这个代码测试之后,发现完全不能正常的工作,需有变成这种模式

1
2
3
4
5
6
7
8
switch locale {
case "en":
err = enTranslations.RegisterDefaultTranslations(v, trans)
case "zh":
err = zhTranslations.RegisterDefaultTranslations(v, trans)
default:
err = enTranslations.RegisterDefaultTranslations(v, trans)
}

但是这样写就需要构造多个 validator 实例,大家平常在使用这个库的时候是怎么配置的