受欢迎的博客标签

ASP.NET Core Model Binding Error Messages Localization

Published
3down voteaccepted To customize framework model binding error messages, you need to set custom accessors for different error message accessors of ModelBindingMessageProvider. These are default error messages which the framework shows when model binding to a property fails: ValueIsInvalidThe value '{0}'is invalid.ValueMustBeANumberThe field {0} must be a number.MissingBindRequiredValue A value for the '{0}' property was not provided.AttemptedValueIsInvalidThe value '{0}'is not valid for{1}.MissingKeyOrValue A value is required.UnknownValueIsInvalidThe supplied value is invalid for{0}.ValueMustNotBeNullThe value '{0}'is invalid. Localize ASP.NET Core Model Binding Error Messages To localize ASP.NET Core model binding error messages, follow these steps: Create Resource File - Create a resource file under Resources folder in your solution and name the file ModelBindingMessages.fa.resx. The name can be anything else but we will use it to create a localizer. In the example, I used fa (Persian) culture. Add Resource Keys - Open the resource file and add keys and values which you want to use for localizing error messages. I used keys and values like below image: Keys which I used are like original messages, except the key for ValueMustNotBeNull which was the same as ValueIsInvalid, so I used Null value is invalid. for it. Configure Options - In ConfigureServices method, when adding Mvc, configure its options to set message accessors for ModelBindingMessageProvider: publicvoidConfigureServices(IServiceCollection services){ services.AddLocalization(options =>{ options.ResourcesPath="Resources";}); services.AddMvc(options =>{var F = services.BuildServiceProvider().GetService<IStringLocalizerFactory>();var L = F.Create("ModelBindingMessages",null); options.ModelBindingMessageProvider.ValueIsInvalidAccessor=(x)=> L["The value '{0}' is invalid."]; options.ModelBindingMessageProvider.ValueMustBeANumberAccessor=(x)=> L["The field {0} must be a number."]; options.ModelBindingMessageProvider.MissingBindRequiredValueAccessor=(x)=> L["A value for the '{0}' property was not provided.", x]; options.ModelBindingMessageProvider.AttemptedValueIsInvalidAccessor=(x, y)=> L["The value '{0}' is not valid for {1}.", x, y]; options.ModelBindingMessageProvider.MissingKeyOrValueAccessor=()=> L["A value is required."]; options.ModelBindingMessageProvider.UnknownValueIsInvalidAccessor=(x)=> L["The supplied value is invalid for {0}.", x]; options.ModelBindingMessageProvider.ValueMustNotBeNullAccessor=(x)=> L["Null value is invalid.", x];}).AddDataAnnotationsLocalization().AddViewLocalization(); services.Configure<RequestLocalizationOptions>(options =>{var supportedCultures =new[]{newCultureInfo("en"),newCultureInfo("fa")}; options.DefaultRequestCulture=newRequestCulture("en","en"); options.SupportedCultures= supportedCultures; options.SupportedUICultures= supportedCultures;});} Also add this code at beginning of Configure method: var supportedCultures =new[]{newCultureInfo("en"),newCultureInfo("fa")}; app.UseRequestLocalization(newRequestLocalizationOptions(){DefaultRequestCulture=newRequestCulture(newCultureInfo("en")),SupportedCultures= supportedCultures,SupportedUICultures= supportedCultures }); Source Code Here you can download a full source code of the implementations: r-aghaei/AspNetCoreLocalizationSample http://stackoverflow.com/questions/40828570/asp-net-core-model-binding-error-messages-localization.