数据校验-自定义错误

数据校验组件支持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语言。

目录结构

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

├── main.go
└── i18n
    ├── en.toml
    └── zh-CN.toml

i18n文件

en.toml

"ReuiredUserName" = "Please input user name"
"ReuiredUserType" = "Please select user type"

zh-CN.toml

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

示例代码

package main

import (
    "github.com/gogf/gf/v2/frame/g"
    "github.com/gogf/gf/v2/i18n/gi18n"
    "github.com/gogf/gf/v2/os/gctx"
    "github.com/gogf/gf/v2/util/gconv"
)

func main() {
    type User struct {
        Name string `v:"required#ReuiredUserName"`
        Type int    `v:"required#ReuiredUserType"`
    }
    var (
        ctx  = gctx.New()
        data = g.Map{
            "name": "john",
        }
        user  = User{}
        ctxEn = gi18n.WithLanguage(ctx, "en")
        ctxCh = gi18n.WithLanguage(ctx, "zh-CN")
    )

    if err := gconv.Scan(data, &user); err != nil {
        panic(err)
    }
    // 英文
    if err := g.Validator().Assoc(data).Data(user).Run(ctxEn); err != nil {
        g.Dump(err.String())
    }
    // 中文
    if err := g.Validator().Assoc(data).Data(user).Run(ctxCh); err != nil {
        g.Dump(err.String())
    }
}

执行后,终端输出:

Please select user type
请选择用户类型