Skip to content

How to translate the param field? #597

@cncal

Description

@cncal

Package version:

v10

Enhancement:

Is it possible to translate the param field?

Code sample:

package main

import (
	"fmt"
	"reflect"

	"github.com/go-playground/locales/en"
	ut "github.com/go-playground/universal-translator"
	"github.com/go-playground/validator/v10"
	en_translations "github.com/go-playground/validator/v10/translations/en"
)

var (
	uni      *ut.UniversalTranslator
	validate *validator.Validate
)

func main() {
	en := en.New()
	uni = ut.New(en, en)
	trans, _ := uni.GetTranslator("en")

	validate = validator.New()
	en_translations.RegisterDefaultTranslations(validate, trans)

	validate.RegisterTagNameFunc(func(field reflect.StructField) string {
		locale := field.Tag.Get(`json`)
		if locale == `` || locale == `-` {
			return ``
		}
		return locale
	})

	type Num struct {
		Num1 uint8 `json:"num1"`
		Num2 uint8 `validate:"gtfield=Num1" json:"num2"`
	}

	num := Num{
		Num1: 0,
		Num2: 0,
	}

	err := validate.Struct(num)
	if err != nil {
		errs := err.(validator.ValidationErrors)
		for _, e := range errs {
			// can translate each error one at a time.
			fmt.Println(e.Translate(trans))
		}
	}
}

What did I expect to see?

num2 must be greater than num1

What did I see instead

num2 must be greater than Num1

tips: num1 is the tag value of struct field Num1

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions