How to localize datatype messages in MVC4 "The field Date must be a date."
<input data-val="true" data-val-date="The field Date be a date." id="Date" name="Date" value="" >
I using:
public class LocalizedDataTypeAttributeAdapter : DataAnnotationsModelValidator<DataTypeAttribute>
{
public LocalizedDataTypeAttributeAdapter(ModelMetadata metadata, ControllerContext context, DataTypeAttribute attribute) : base(metadata, con
text, attribute)
{
attribute.ErrorMessageResourceType = typeof(Localization.Global);
attribute.ErrorMessageResourceName = "PropertyDataFormat";
}
}
Also LocalizedDataTypeAttributeAdapter register in Global.asax
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(DataTypeAttribute), typeof(LocalizedDataTypeAttributeAdapter));
You need to rewrite ClientDataTypeModelValidatorProvider
Take it https://github.com/mono/aspnetwebstack/blob/master/src/System.Web.Mvc/ClientDataTypeModelValidatorProvider.cs
and change
private static string GetUserResourceString(ControllerContext controllerContext, string resourceName)
{
string result = null;
if (!String.IsNullOrEmpty(ResourceClassKey) && (controllerContext != null) && (controllerContext.HttpContext != null))
{
//result = controllerContext.HttpContext.GetGlobalResourceObject(ResourceClassKey, resourceName, CultureInfo.CurrentUICulture) as string;
result = GlobalRes.ResourceManager.GetString(resourceName);
}
return result;
}
Then set it as the DefaultModelBinder
during the Application_Start
in Global.asax:
protected void Application_Start()
{
var existingProvider = ModelValidatorProviders.Providers.Single(x => x is ClientDataTypeModelValidatorProvider);
ModelValidatorProviders.Providers.Remove(existingProvider);
ModelValidatorProviders.Providers.Add(new myClientDataTypeModelValidatorProvider()); //!!
myClientDataTypeModelValidatorProvider.ResourceClassKey = typeof(GlobalRes).Name;
DefaultModelBinder.ResourceClassKey = typeof(GlobalRes).Name;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With