2010-09-21 18 views
20

si decorar las propiedades de mis ViewModels con atributos como esto:Localize mensajes por defecto anotaciones de datos ([Obligatorio] [StringLength] etc.)

public class Vm 
{ 

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

} 

Voy a recibir los mensajes de validación inglés:

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

¿cómo podría traducirlos?

+0

he descrito mi enfoque aquí: http://stackoverflow.com/questions/19398691/ mvc-localization-from-the-database-that-covers-all-messages-required-displayna –

Respuesta

36

podría utilizar el ErrorMessageResourceName propiedad:

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

Usted puede pedir this blog post para un ejemplo.


ACTUALIZACIÓN:

En Application_Start:

DefaultModelBinder.ResourceClassKey = "Messages"; 

Y en el archivo Messages.resx es necesario agregar los mensajes de error personalizados. Use el reflector para mirar los ensamblajes System.Web.Mvc y System.ComponentModel.DataAnnotations para ver los nombres de las teclas que se usarán.

+2

Lo haría li ke cambiar los mensajes predeterminados sin especificarlo para cada propiedad, una vez vi que tienes que tener un Messages.resx en tus App_GlobalResources, pero no conozco las claves para cada mensaje – Omu

+0

Mira mi actualización. –

+0

@Darin Dimitrov podría por favor decirme más exactamente dónde en System.Web.Mvc para mirar – Omu

9

Hay una solución mucho mejor con asp.net MVC 3 en estos días en caso de que alguien esté buscando un enfoque más nuevo y mejor.

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

Por ejemplo:

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 relacionado pregunta - Mvc 3.0 DataAnnotations Localization

+0

votante de baja, explique el motivo de su acción. –

Cuestiones relacionadas