You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
1.2 KiB
30 lines
1.2 KiB
using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata;
|
|
using Microsoft.Extensions.Localization;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using System.Reflection;
|
|
|
|
namespace Infrastructure.Web
|
|
{
|
|
public class LocalizedValidationMetadataProvider : IValidationMetadataProvider
|
|
{
|
|
private IStringLocalizer _localizer;
|
|
|
|
public LocalizedValidationMetadataProvider(IStringLocalizerFactory factory)
|
|
{
|
|
this._localizer = factory.Create("Resources.Resource", Assembly.GetEntryAssembly().GetName().Name);
|
|
}
|
|
|
|
public void CreateValidationMetadata(ValidationMetadataProviderContext context)
|
|
{
|
|
foreach (var attribute in context.ValidationMetadata.ValidatorMetadata)
|
|
{
|
|
var validationAttribute = attribute as ValidationAttribute;
|
|
if (validationAttribute != null && validationAttribute.ErrorMessage == null && validationAttribute.ErrorMessageResourceName == null)
|
|
{
|
|
var name = validationAttribute.GetType().Name;
|
|
validationAttribute.ErrorMessage = _localizer.GetString(name);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |