Customised error messages are not translated in ASP.NET MVC 4

陌路散爱 提交于 2019-12-21 02:28:29

问题


I want to translate the validation message "The field Date must be a date."

I've added the following keys into Application_Start() at Global.asax

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

I've created ModelBinders.resx, ModelBinders.nl.resx, ModelBinders.fr.resx in App_GlobalResources.

I've added the following string resources (or translations) in the .resx files:

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.

When I submit a string for a date, I will receive the translation for "FieldMustBeDate". When I submit an invalid date (for example "01/01/201a") I receive the untranslated message for "PropertyValueInvalid" that is defined in the default ModelBinders.resx , instead of the translation... How can I show the correct translation for PropertyValueInvalid?


回答1:


I'll explain how I specific client messages. First, in the model you set the resource:

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

Second, in the the controller you overwrite thread culture, I get that from a route, for example in the Initialize method:

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

It is important that resources are properly formatted: ModelBinders.resx, ModelBinders.es-ES.resx, ModelBinders.en-US.resx ... And nothing else, It works for me well. I hope this approach will help you.



来源:https://stackoverflow.com/questions/26890014/customised-error-messages-are-not-translated-in-asp-net-mvc-4

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!