goctl-i18n 是一个面向 goctl api plugin 的插件,用于为 go-zero API 生成结果补充两类能力:
validate:为请求结构体自动生成Validate() errori18n:基于go-i18n生成校验错误翻译层与中英文 YAML 语言资源
- 自动识别
.api中被路由引用且以Req结尾的请求结构体 - 自动为各服务的
internal/types/types.go追加Validate()方法 - 将共享校验器、校验扩展、翻译器和 i18n 资源统一生成到单仓根目录
tools/i18n - 可选生成共享
validation.go,提供自定义校验注册骨架 - 可选生成共享
translator.go,提供Translate(err, lang)多语言翻译入口 - 可选生成中英文两套 YAML 语言资源
- 重复执行保持幂等,不会重复追加同一批
Validate()方法
go install github.com/xucxapp/goctl-i18n/cmd/goctl-i18n@latestWindows 下请确认 %GOPATH%\bin 已加入 PATH。
先用 goctl 生成 go-zero API 项目:
goctl api go -api demo.api -dir .然后执行插件:
goctl api plugin -api demo.api -dir . -p goctl-i18n="validate"生成校验翻译与 i18n 文件:
goctl api plugin -api demo.api -dir . -p goctl-i18n="validate --translator"同时生成自定义校验骨架:
goctl api plugin -api demo.api -dir . -p goctl-i18n="validate --translator --custom"开启调试日志:
goctl api plugin -api demo.api -dir . -p goctl-i18n="validate --translator --custom --debug"默认会修改:
internal/types/types.go
按选项生成:
tools/i18n/validator.gotools/i18n/validation.gotools/i18n/translator.gotools/i18n/i18n.gotools/i18n/locales/active.zh.yamltools/i18n/locales/active.en.yaml
当开启 --translator 后,可在业务中显式传入语言:
import i18n "example.com/your-module/tools/i18n"
err := req.Validate()
if err != nil {
return nil, i18n.Translate(err, "zh")
}或:
import i18n "example.com/your-module/tools/i18n"
err := req.Validate()
if err != nil {
return nil, i18n.Translate(err, "en")
}- API 示例:
examples/demo.api - 预期输出说明:
examples/expected/README.md
go test ./...
go build ./...完整设计与使用说明见:
docs/design.mddocs/usage.md
validate 部分的设计与接入方式借鉴了 linabellbiu/goctl-validate。