go validator 多语言支持

aababc · 2025-3-6 17:07:29 · 106 次点击

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

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)

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

switch locale {
case "en":
err = enTranslations.RegisterDefaultTranslations(v, trans)
case "zh":
err = zhTranslations.RegisterDefaultTranslations(v, trans)
default:
err = enTranslations.RegisterDefaultTranslations(v, trans)
}

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

举报· 106 次点击
登录 注册 站外分享
快来抢沙发
0 条回复  
返回顶部