Traduzione dei messaggi di validazione di ActiveRecord

ActiveRecord ha un buon sistema per la validazione delle entità. Infatti può essere sufficiente derivare la propria classe entity dalla classe ActiveRecordValidationBase e decorare con l'attributo opportuno una proprietà dell'entità così:

 

[Property(Column="Percentage", NotNull=true),
ValidateNonZeroPositiveNumber("Immettere un valore nella percentuale")]
public virtual decimal Percentage
{
  get { return _percentage; }
  set { _percentage = value; }
}

 

Ovviamente ci sono molti tipi di validatori e comunque è possibile scrivere una propria classe di validazione.

I problemi sorgono se però abbiamo la necessità di tradurre il testo di errore, infatti non è possibile sostituire una funzione alla stringa dell' errore perchè è contenuta in un parametro di un attributo.

Fortunatamente il metodo che si occupa di emettere il messaggio di errore (OnNotValid nella classe ActiveRecordvalidationBase) è dichiarato Override è perciò sufficiente scrivere nella classe relativa alla entiry, o ancora meglio, nella sua classe padre il seguente codice:

 

protected override void OnNotValid()
{
  string[] translatedErrorMessages = new string[ValidationErrorMessages.Length];
  for (int i = 0; i < translatedErrorMessages.Length; i++)
    translatedErrorMessages[i] = rm.GetString(ValidationErrorMessages[i]); 

  throw new ValidationException(
    rm.GetString("Can't save or update as there is one (or more) field that has not passed the validation test"),
    translatedErrorMessages);
} 

dove rm è un'instanza del tipo ResourceManager opportunamente settata.

posted @ mercoledì 21 febbraio 2007 19:44

Print
Comments have been closed on this topic.