代码之家  ›  专栏  ›  技术社区  ›  Mathieu VIALES Pavel

隐式本地化法语中的“Required”批注

  •  4
  • Mathieu VIALES Pavel  · 技术社区  · 7 年前

    TLDR;

    [Required(ErrorMessage = "Le champ {0} est obligatoire")]
    

    [Required]
    

    documentation 不提供隐式本地化给定数据批注集的方法。

    我想得到注释的错误消息,比如 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”分配给--它是只读的

    我找不到任何可以用作此对象的setter的属性。


    this 所以回答

    启动.cs services.AddSingleton();

    public class LocalizedValidationAttributeAdapterProvider : IValidationAttributeAdapterProvider
    {
        private readonly ValidationAttributeAdapterProvider _originalProvider = new ValidationAttributeAdapterProvider();
    
        public IAttributeAdapter GetAttributeAdapter(ValidationAttribute attribute, IStringLocalizer stringLocalizer)
        {
            /* override message */
        }
    }
    

    但这只抓住了 DataType

    0 回复  |  直到 7 年前
        1
  •  1
  •   Andy S.    5 年前

    在.Net核心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();
    }
    
    推荐文章