Пытаюсь добавить собственный перевод на игровую площадку / валидатор, но он не работает

Я использую пакет 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")
Другие вопросы по тегам