TLDR;如何获得
的行为[Required(ErrorMessage = "Le champ {0} est obligatoire")]
仅写时
[Required]
据我所知,documentation没有提供一种隐式本地化给定的DataAnnotations集的方法。
[我想使诸如Required
和StringLength
之类的注释的错误消息是可以重写的,而无需触及诸如Display
之类的其他消息,而无需使用ErrorMessage
属性来明确指定翻译。 >
注意:我只需要将消息翻译成法语,因此无需将解决方案绑定到请求的语言。
我尝试了以下操作:
来自this GitHub线程
在Startup.cs
中
services.AddMvc(options => options.ModelBindingMessageProvider.AttemptedValueIsInvalidAccessor = (value, name) => $"Hmm, '{value}' is not a valid value for '{name}'."));
给我以下错误
无法将属性或索引器'DefaultModelBindingMessageProvider.AttemptedValueIsInvalidAccessor'分配给它-这是只读的
而且我找不到任何可以用作此对象的设置器的属性。
来自this这样的答案
在Startup.cs
中services.AddSingleton();
并创建一个如下的类
public class LocalizedValidationAttributeAdapterProvider : IValidationAttributeAdapterProvider { private readonly ValidationAttributeAdapterProvider _originalProvider = new ValidationAttributeAdapterProvider(); public IAttributeAdapter GetAttributeAdapter(ValidationAttribute attribute, IStringLocalizer stringLocalizer) { /* override message */ } }
但是这仅捕获了
DataType
批注
TLDR;如何只写[Required]时如何获得[Required(ErrorMessage =“ Le champ {0} est obligatoire”)]的行为据我了解,文档没有提供隐式的方法...
在.Net Core 2中,Accessor
中的ModelBindingMessageProvider
属性是只读的,但是您仍然可以使用Set...Accessor()
方法进行设置。由于ASP.NET Core Model Binding Error Messages Localization的答案,这里的代码类似于我正在使用的代码。
public static class ModelBindingConfig
{
public static void Localize(MvcOptions opts)
{
opts.ModelBindingMessageProvider.SetMissingBindRequiredValueAccessor(
x => string.Format("A value for the '{0}' property was not provided.", x)
);
opts.ModelBindingMessageProvider.SetMissingKeyOrValueAccessor(
() => "A value is required."
);
}
}
// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddMvc(
opts =>
{
ModelBindingConfig.Localize(opts);
})
.AddViewLocalization()
.AddDataAnnotationsLocalization();
}