Files
tyapi-server/internal/shared/validator/translations.go
2025-08-18 18:18:04 +08:00

292 lines
11 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package validator
import (
ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10"
)
// RegisterCustomTranslations 注册所有自定义翻译
func RegisterCustomTranslations(validate *validator.Validate, trans ut.Translator) {
// 注册标准字段翻译
registerStandardTranslations(validate, trans)
// 注册自定义字段翻译
registerCustomFieldTranslations(validate, trans)
}
// registerStandardTranslations 注册标准翻译
func registerStandardTranslations(validate *validator.Validate, trans ut.Translator) {
// 必填字段翻译
validate.RegisterTranslation("required", trans, func(ut ut.Translator) error {
return ut.Add("required", "{0}不能为空", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("required", getFieldDisplayName(fe.Field()))
return t
})
// 字段相等翻译
validate.RegisterTranslation("eqfield", trans, func(ut ut.Translator) error {
return ut.Add("eqfield", "{0}必须与{1}一致", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("eqfield", getFieldDisplayName(fe.Field()), getFieldDisplayName(fe.Param()))
return t
})
// 最小长度翻译
validate.RegisterTranslation("min", trans, func(ut ut.Translator) error {
return ut.Add("min", "{0}长度不能少于{1}位", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("min", getFieldDisplayName(fe.Field()), fe.Param())
return t
})
// 最大长度翻译
validate.RegisterTranslation("max", trans, func(ut ut.Translator) error {
return ut.Add("max", "{0}长度不能超过{1}位", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("max", getFieldDisplayName(fe.Field()), fe.Param())
return t
})
// 固定长度翻译
validate.RegisterTranslation("len", trans, func(ut ut.Translator) error {
return ut.Add("len", "{0}长度必须为{1}位", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("len", getFieldDisplayName(fe.Field()), fe.Param())
return t
})
// 邮箱翻译
validate.RegisterTranslation("email", trans, func(ut ut.Translator) error {
return ut.Add("email", "{0}必须是有效的邮箱地址", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("email", getFieldDisplayName(fe.Field()))
return t
})
// 枚举值翻译
validate.RegisterTranslation("oneof", trans, func(ut ut.Translator) error {
return ut.Add("oneof", "{0}必须是以下值之一: {1}", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("oneof", getFieldDisplayName(fe.Field()), fe.Param())
return t
})
// 大于翻译
validate.RegisterTranslation("gt", trans, func(ut ut.Translator) error {
return ut.Add("gt", "{0}必须大于{1}", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("gt", getFieldDisplayName(fe.Field()), fe.Param())
return t
})
}
// registerCustomFieldTranslations 注册自定义字段翻译
func registerCustomFieldTranslations(validate *validator.Validate, trans ut.Translator) {
// 手机号翻译
validate.RegisterTranslation("phone", trans, func(ut ut.Translator) error {
return ut.Add("phone", "{0}必须是有效的手机号", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("phone", getFieldDisplayName(fe.Field()))
return t
})
// 用户名翻译
validate.RegisterTranslation("username", trans, func(ut ut.Translator) error {
return ut.Add("username", "{0}格式不正确只能包含字母、数字、下划线且必须以字母开头长度3-20位", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("username", getFieldDisplayName(fe.Field()))
return t
})
// 强密码翻译
validate.RegisterTranslation("strong_password", trans, func(ut ut.Translator) error {
return ut.Add("strong_password", "{0}强度不足必须包含大小写字母和数字且不少于8位", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("strong_password", getFieldDisplayName(fe.Field()))
return t
})
// 统一社会信用代码翻译
validate.RegisterTranslation("social_credit_code", trans, func(ut ut.Translator) error {
return ut.Add("social_credit_code", "{0}格式不正确必须是18位统一社会信用代码", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("social_credit_code", getFieldDisplayName(fe.Field()))
return t
})
// 身份证号翻译
validate.RegisterTranslation("id_card", trans, func(ut ut.Translator) error {
return ut.Add("id_card", "{0}格式不正确必须是18位身份证号", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("id_card", getFieldDisplayName(fe.Field()))
return t
})
// 价格翻译
validate.RegisterTranslation("price", trans, func(ut ut.Translator) error {
return ut.Add("price", "{0}必须是非负数", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("price", getFieldDisplayName(fe.Field()))
return t
})
// 排序方向翻译
validate.RegisterTranslation("sort_order", trans, func(ut ut.Translator) error {
return ut.Add("sort_order", "{0}必须是 asc 或 desc", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("sort_order", getFieldDisplayName(fe.Field()))
return t
})
// 产品代码翻译
validate.RegisterTranslation("product_code", trans, func(ut ut.Translator) error {
return ut.Add("product_code", "{0}格式不正确只能包含字母、数字、下划线、连字符、中英文括号长度3-50位", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("product_code", getFieldDisplayName(fe.Field()))
return t
})
// UUID翻译
validate.RegisterTranslation("uuid", trans, func(ut ut.Translator) error {
return ut.Add("uuid", "{0}必须是有效的UUID格式", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("uuid", getFieldDisplayName(fe.Field()))
return t
})
// URL翻译
validate.RegisterTranslation("url", trans, func(ut ut.Translator) error {
return ut.Add("url", "{0}必须是有效的URL地址", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("url", getFieldDisplayName(fe.Field()))
return t
})
// 企业邮箱翻译
validate.RegisterTranslation("enterprise_email", trans, func(ut ut.Translator) error {
return ut.Add("enterprise_email", "{0}必须是有效的企业邮箱地址", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("enterprise_email", getFieldDisplayName(fe.Field()))
return t
})
// 企业地址翻译
validate.RegisterTranslation("enterprise_address", trans, func(ut ut.Translator) error {
return ut.Add("enterprise_address", "{0}长度必须在2-200字符之间且不能只包含空格", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("enterprise_address", getFieldDisplayName(fe.Field()))
return t
})
// IP地址翻译
validate.RegisterTranslation("ip", trans, func(ut ut.Translator) error {
return ut.Add("ip", "{0}必须是有效的IPv4地址格式", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("ip", getFieldDisplayName(fe.Field()))
return t
})
// 授权日期翻译
validate.RegisterTranslation("auth_date", trans, func(ut ut.Translator) error {
return ut.Add("auth_date", "{0}格式不正确必须是YYYYMMDD-YYYYMMDD格式且日期范围必须包括今天", true)
}, func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("auth_date", getFieldDisplayName(fe.Field()))
return t
})
}
// getFieldDisplayName 获取字段显示名称(中文)
func getFieldDisplayName(field string) string {
fieldNames := map[string]string{
"phone": "手机号",
"password": "密码",
"confirm_password": "确认密码",
"old_password": "原密码",
"new_password": "新密码",
"confirm_new_password": "确认新密码",
"code": "验证码",
"username": "用户名",
"email": "邮箱",
"enterprise_email": "企业邮箱",
"enterprise_address": "企业地址",
"ip_address": "IP地址",
"display_name": "显示名称",
"scene": "使用场景",
"Password": "密码",
"NewPassword": "新密码",
"ConfirmPassword": "确认密码",
"name": "名称",
"Name": "名称",
"description": "描述",
"Description": "描述",
"price": "价格",
"Price": "价格",
"category_id": "分类ID",
"CategoryID": "分类ID",
"product_id": "产品ID",
"ProductID": "产品ID",
"user_id": "用户ID",
"UserID": "用户ID",
"page": "页码",
"Page": "页码",
"page_size": "每页数量",
"PageSize": "每页数量",
"keyword": "关键词",
"Keyword": "关键词",
"sort_by": "排序字段",
"SortBy": "排序字段",
"sort_order": "排序方向",
"SortOrder": "排序方向",
"company_name": "企业名称",
"CompanyName": "企业名称",
"unified_social_code": "统一社会信用代码",
"UnifiedSocialCode": "统一社会信用代码",
"legal_person_name": "法定代表人姓名",
"LegalPersonName": "法定代表人姓名",
"legal_person_id": "法定代表人身份证号",
"LegalPersonID": "法定代表人身份证号",
"legal_person_phone": "法定代表人手机号",
"LegalPersonPhone": "法定代表人手机号",
"verification_code": "验证码",
"VerificationCode": "验证码",
"contract_url": "合同URL",
"ContractURL": "合同URL",
"amount": "金额",
"Amount": "金额",
"balance": "余额",
"Balance": "余额",
"is_active": "是否激活",
"IsActive": "是否激活",
"is_enabled": "是否启用",
"IsEnabled": "是否启用",
"is_visible": "是否可见",
"IsVisible": "是否可见",
"is_package": "是否组合包",
"IsPackage": "是否组合包",
"Code": "编号",
"content": "内容",
"Content": "内容",
"sort": "排序",
"Sort": "排序",
"seo_title": "SEO标题",
"SEOTitle": "SEO标题",
"seo_description": "SEO描述",
"SEODescription": "SEO描述",
"seo_keywords": "SEO关键词",
"SEOKeywords": "SEO关键词",
"id": "ID",
"ID": "ID",
"ids": "ID列表",
"IDs": "ID列表",
"auth_date": "授权日期",
"AuthDate": "授权日期",
"id_card": "身份证号",
"IDCard": "身份证号",
}
if displayName, exists := fieldNames[field]; exists {
return displayName
}
return field
}