asp.net-core-2.1 - 隐式本地化法语中的“必需”注释
问题描述
TLDR;如何获取行为
[Required(ErrorMessage = "Le champ {0} est obligatoire")]
虽然只写
[Required]
据我了解,文档没有提供隐式本地化一组给定 DataAnnotations 的方法。
我希望有诸如注释的错误消息,Required
并且StringLength
可以在不触及其他注释的情况下被覆盖,Display
并且不需要使用ErrorMessage
属性显式指定翻译。
注意:我只需要将消息翻译成法语,因此不需要将解决方案绑定到请求的语言。
我尝试了以下方法:
从这个GitHub 线程
在里面Startup.cs
services.AddMvc(options => options.ModelBindingMessageProvider.AttemptedValueIsInvalidAccessor =
(value, name) => $"Hmm, '{value}' is not a valid value for '{name}'."));
给我以下错误
无法将属性或索引器“DefaultModelBindingMessageProvider.AttemptedValueIsInvalidAccessor”分配给 - 它是只读的
而且我找不到任何可以用作该对象的设置器的属性。
从这个答案
在Startup.cs
services.AddSingleton();
并创建一个像follow这样的类
public class LocalizedValidationAttributeAdapterProvider : IValidationAttributeAdapterProvider
{
private readonly ValidationAttributeAdapterProvider _originalProvider = new ValidationAttributeAdapterProvider();
public IAttributeAdapter GetAttributeAdapter(ValidationAttribute attribute, IStringLocalizer stringLocalizer)
{
/* override message */
}
}
但这仅捕获了DataType
注释
解决方案
在 .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();
}
推荐阅读
- crash - 每次打开 SQL Developer 都会崩溃
- python - 如何使用 matplotlib/gridspec 修改子图之间的宽度?
- r - for 循环以替换以下一个变量为条件的缺失案例(将不胜感激 tidyverse 解决方案)
- java - Hibernate/JTA Transaction 无法继续:尝试关闭连接时的 STATUS_COMMITTED
- linux - 从二进制转储文件和 ELF-Linux 中提取回溯
- javascript - 如何按特定 ID 合并和排序 2 个数组
- python - Sympy 对模块化组的支持
- tensorflow - 如何在 TensorFlow 检测模型上使用 Lucid Interpretability 工具?
- php - 尝试使用 PHP Laravel 对查询结果进行排序或排序
- reactjs - NPM 安装了近 202M 的模块——这不可能