数据校验组件支持 i18n 特性,内部使用了 goframe 框架统一的 i18n 组件实现。默认使用默认的 i18n 单例对象,即 g.I18n() 对象。

在进一步使用之前,关于 i18n 国际化功能配置及使用请参考章节: I18N国际化

配置示例

默认 i18n 错误提示

默认的英文国际化语言配置文件参考: https://github.com/gogf/gf/tree/master/util/gvalid/i18n/en

中文错误提示

我们提供了建议的中文 i18n 国际化语言配置文件: https://github.com/gogf/gf/tree/master/util/gvalid/i18n/cn

默认错误提示

当在 i18n 中找不到对应规则的错误提示时,将会使用 __default__ 配置的错误提示信息。往往使用在自定义规则中。

开发示例

我们通过中间件统一设置请求的错误提示 i18n 语言。

目录结构

数据校验-自定义错误 - 图1注意

注意工程目录结构,以便于默认的 g.i18n() 对象能自动读取配置。有相当一部分同学倒在了这里。

  1. ├── main.go
  2. └── i18n
  3. ├── en.toml
  4. └── zh-CN.toml

i18n 文件

en.toml

  1. "ReuiredUserName" = "Please input user name"
  2. "ReuiredUserType" = "Please select user type"

zh-CN.toml

  1. "ReuiredUserName" = "请输入用户名称"
  2. "ReuiredUserType" = "请选择用户类型"

示例代码

  1. package main
  2. import (
  3. "github.com/gogf/gf/v2/frame/g"
  4. "github.com/gogf/gf/v2/i18n/gi18n"
  5. "github.com/gogf/gf/v2/os/gctx"
  6. "github.com/gogf/gf/v2/util/gconv"
  7. )
  8. func main() {
  9. type User struct {
  10. Name string `v:"required#ReuiredUserName"`
  11. Type int `v:"required#ReuiredUserType"`
  12. }
  13. var (
  14. ctx = gctx.New()
  15. data = g.Map{
  16. "name": "john",
  17. }
  18. user = User{}
  19. ctxEn = gi18n.WithLanguage(ctx, "en")
  20. ctxCh = gi18n.WithLanguage(ctx, "zh-CN")
  21. )
  22. if err := gconv.Scan(data, &user); err != nil {
  23. panic(err)
  24. }
  25. // 英文
  26. if err := g.Validator().Assoc(data).Data(user).Run(ctxEn); err != nil {
  27. g.Dump(err.String())
  28. }
  29. // 中文
  30. if err := g.Validator().Assoc(data).Data(user).Run(ctxCh); err != nil {
  31. g.Dump(err.String())
  32. }
  33. }

执行后,终端输出:

  1. Please select user type
  2. 请选择用户类型