2010-09-21 13 views
20

se decorare la proprietà dei miei ViewModels con gli attributi come questo:localizzare i messaggi dati annotazioni di default ([Required] [StringLength] etc.)

public class Vm 
{ 

[Required] 
[StringLength(35)] 
public string Name {get;set;} 

} 

ho intenzione di ottenere messaggi di convalida in inglese:

"this field is required" 
"The field Name must be a string with a maximum length of 35" 

come posso tradurli?

+0

ho descritto il mio approccio qui: http://stackoverflow.com/questions/19398691/ mvc-localization-from-the-database-that-covers-all-messages-required-displayna –

risposta

36

è possibile utilizzare la proprietà ErrorMessageResourceName:

[Required(ErrorMessageResourceName = "SomeResource")] 
[StringLength(30, ErrorMessageResourceName = "SomeOtherResource")] 
public string Name { get; set; } 

Si può checkout this blog post per un esempio.


UPDATE:

In Application_Start:

DefaultModelBinder.ResourceClassKey = "Messages"; 

E nel file Messages.resx è necessario aggiungere i messaggi di errore personalizzato. Utilizzare Reflector per esaminare gli assembly System.Web.Mvc e System.ComponentModel.DataAnnotations per vedere i nomi delle chiavi da utilizzare.

+2

Vorrei li ke per cambiare i messaggi predefiniti senza specificarlo per ogni proprietà, ho visto una volta che devi avere un Message.resx nel tuo App_GlobalResources, ma non conosco le chiavi per ogni messaggio – Omu

+0

Si prega di consultare il mio aggiornamento. –

+0

@Darin Dimitrov potrebbe dirmi di più esattamente dove in System.Web.Mvc a cercare – Omu

9

C'è una soluzione molto migliore con asp.net MVC 3 in questi giorni in cui qualcuno è alla ricerca di un approccio nuovo e di gran lunga migliore.

http://blog.gauffin.org/2011/09/easy-model-and-validation-localization-in-asp-net-mvc3/

Ad esempio:

public class UserViewModel 
{ 
    [Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Resources.LocalizedStrings))] 
    [LocalizedDisplayName(ErrorMessageResourceName = "UserId", ErrorMessageResourceType = typeof(Resources.LocalizedStrings))] 
    [LocalizedDescription(ErrorMessageResourceName = "UserIdDescription", ErrorMessageResourceType = typeof(Resources.LocalizedStrings))] 
    public int Id { get; set; } 
} 

domanda SO correlate - Mvc 3.0 DataAnnotations Localization

+0

down voter, per favore spiega la ragione della tua azione. –

Problemi correlati