Как использовать SharedResource для аннотаций данных в ASP.NET Ядро MVC 2.2?

#c# #asp.net-core-mvc

#c# #asp.net-core-mvc

Вопрос:

У меня есть проект, использующий ASP.NET Ядро MVC 2.2.

Для локализации я использовал SharedResource. В представлениях и контроллерах это работает нормально, но не для аннотаций данных в моделях.

Моя модель:

 public class MyProfileModel : BaseModel
{
    [Required(ErrorMessage = "HomeFirstNameRequired")]
    [StringLengthWithErrorMessage(20)]
    [Display(Name = "HomeFirstName")]
    public string FirstName { get; set; }
}
  

Мой запуск:

 public void ConfigureServices(IServiceCollection services)
{
    ...

    services.AddLocalization();

    services.AddMvc()
        .AddDataAnnotationsLocalization(options =>
            {
                options.DataAnnotationLocalizerProvider = (type, factory) => factory.Create(typeof(SharedResources));
            })
        .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
        .AddDataAnnotationsLocalization()
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

    ...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseRequestLocalization(new RequestLocalizationOptions
                               {
                                   DefaultRequestCulture = new RequestCulture(DefaultCultureInfo),
                                   SupportedCultures = SupportedCultures,
                                   SupportedUICultures = SupportedCultures
                               });

    ...
}
  

Я читал, что значение ErrorMessage может использовать локализацию, но это не работает. Также мне это нужно для отображаемого имени..

У кого-нибудь есть идея?

Комментарии:

1. Вы добавляете AddDataAnnotationsLocalization дважды, а именно, во второй раз этого не происходит с фабрикой, которую вы использовали в первый раз. Я никогда не делал этого сам, но вполне возможно и даже вероятно, что второй вызов переопределяет первый.

2. По предложению Криса, удалите второе AddDataAnnotationsLocalization , если не сработает, убедитесь, что namespace для SharedResource является projectnamespace без Resources . Вот рабочая демонстрация .

3. О, я слишком долго кодировал, я этого не видел, и да, я удалил второй, и это решило мою проблему! Спасибо!