Пытаюсь добавить собственный перевод на игровую площадку / валидатор, но он не работает
Я использую пакет go-Playground / validator и пытаюсь добавить собственный перевод.
Вот моя функция, которая инициализирует мой переводчик и добавляет к нему собственный перевод.
func initTranslator(validate *validator.Validate) error {
translator := en.New()
uni := ut.New(translator, translator)
trans, found := uni.GetTranslator("en")
if !found {
return fmt.Errorf("translator not found")
}
err := en_translations.RegisterDefaultTranslations(validate, trans)
if err != nil {
return err
}
err = validate.RegisterTranslation(
"DateValidatorNil",
trans,
func(ut ut.Translator) error {
return ut.Add("DateValidatorNil", "The field doesn't match the date format \"yyyy-MM-dd\" nor \"yyyy-MM-dd hh:mm:ss\"", true)
},
func(ut ut.Translator, fe validator.FieldError) string {
t, _ := ut.T("DateValidatorNil", fe.Field())
return t
},
)
if err != nil {
return err
}
return nil
}
Когда есть недопустимая дата, я хочу, чтобы сообщение об ошибке выглядело так
The field doesn't match the date format "yyyy-MM-dd" nor "yyyy-MM-dd hh:mm:ss"
но перевод не работает и у меня
"Key: ModifLeaveRequest.modifLeaveInfos.date_from' Error:Field validation for 'date_from' failed on the 'DateValidatorNil' tag"
Я хотел бы знать, что мне не хватает? Большое спасибо.
1 ответ
Переменная была глобальной, которую я использовал для перевода ошибок. Я обнаружил, что переменная все еще равна нулю, когда я хотел ее использовать.
Почему? Потому что эта строка:
trans, found := uni.GetTranslator("en")
Это создаст новую локальную переменную с именем
trans
, он не инициализирует глобальную переменную. (cf:глобальная переменная ошибки остается нулевой после инициализации
Чтобы исправить это, я сделал следующее:
var found bool
trans, found = uni.GetTranslator("en")