2010-09-21 13 views
20

gdybym ozdobić właściwości moich ViewModels z atrybutów, takich jak ten:zlokalizować ([Wymagane] [StringLength] itd.)

public class Vm 
{ 

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

} 

mam zamiar dostać angielskich komunikatów walidacji

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

Jak mogę je przetłumaczyć?

+0

opisałem moje podejście tutaj: http://stackoverflow.com/questions/19398691/ mvc-localization-from-the-database-that-covers-all-messages-required-displayna –

Odpowiedz

36

Można użyć właściwości ErrorMessageResourceName:

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

Możesz kasy this blog post dla przykładu.


UPDATE:

W Application_Start:

DefaultModelBinder.ResourceClassKey = "Messages"; 

iw pliku Messages.resx trzeba dodać niestandardowe komunikaty o błędach. Użyj Reflectora, aby spojrzeć na zespoły System.Web.Mvc i System.ComponentModel.DataAnnotations, aby zobaczyć nazwy kluczy do użycia.

+2

Chciałbym li ke, aby zmienić domyślne komunikaty bez określania ich dla każdej właściwości, widziałem raz, że musisz mieć Messages.resx w App_GlobalResources, ale nie znam kluczy dla każdej wiadomości – Omu

+0

Proszę zobaczyć moją aktualizację. –

+0

@ Dinar Dimitrov, czy mógłbyś mi powiedzieć, gdzie dokładnie w System.Web.Mvc szukać – Omu

9

Istnieje o wiele lepsze rozwiązanie przy użyciu asp.net MVC 3 w dzisiejszych czasach, gdy ktoś szuka nowszego i znacznie lepszego podejścia.

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

Na przykład:

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; } 
} 

SO powiązane pytanie - Mvc 3.0 DataAnnotations Localization

+0

niższy wyborca, proszę wyjaśnić powód swojego działania. –

Powiązane problemy