Les messages d’erreur personnalisés ne sont pas traduits dans ASP.NET MVC 4

Je souhaite traduire le message de validation “Le champ Date doit être une date”.

J’ai ajouté les clés suivantes dans Application_Start () à Global.asax

ClientDataTypeModelValidatorProvider.ResourceClassKey = "ModelBinders"; DefaultModelBinder.ResourceClassKey = "ModelBinders"; 

J’ai créé ModelBinders.resx, ModelBinders.nl.resx, ModelBinders.fr.resx dans App_GlobalResources.

J’ai ajouté les ressources de chaîne suivantes (ou traductions) dans les fichiers .resx:

 Name Value ==== ===== FieldMustBeDate The field {0} must be a date. FieldMustBeNumeric The field {0} must be a number. PropertyValueInvalid The value '{0}' is not valid for {1}. PropertyValueRequired A value is required. 

Lorsque je soumets une chaîne pour une date, je reçois la traduction de “FieldMustBeDate”. Lorsque je soumets une date non valide (par exemple, “01/01 / 201a”), je reçois le message non traduit pour “PropertyValueInvalid” défini dans le fichier par défaut ModelBinders.resx, au lieu de la traduction … Comment afficher la traduction correcte pour PropertyValueInvalid?

Je vais expliquer comment je messages spécifiques du client. Tout d’abord, dans le modèle, vous définissez la ressource:

  [Required(ErrorMessageResourceType = typeof(Resources.ModelBinders), ErrorMessageResourceName = "Required")] [Display(Name = "UserName", ResourceType = typeof(Resources.ModelBinders))] public ssortingng UserName { get; set; } 

Deuxièmement, dans le contrôleur où vous écrasez la culture de thread, je l’obtiens à partir d’une route, par exemple dans la méthode Initialize:

  protected override void Initialize(RequestContext requestContext) { ssortingng cultureInfo = requestContext.RouteData.GetRequiredSsortingng("cultureInfo"); System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(cultureInfo); System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(cultureInfo); base.Initialize(requestContext); } 

Messages clients en anglais

Messages clients en espagnol

Il est important que les ressources soient correctement formatées: ModelBinders.resx, ModelBinders.es-ES.resx, ModelBinders.en-US.resx … Et rien d’autre, cela fonctionne bien pour moi. J’espère que cette approche vous aidera.