В ASP.NET Core 2.0 я использую пользовательскую службу IStringLocalizer
, и после настройки большая часть моего веб-сайта переводится, за исключением сообщения обязательного поля по умолчанию, даже после того, как я установил ModelBindingMessageProvider
и DataAnnotationLocalizerProvider
Модель
public class EmailModel
{
[Required]
[EmailAddress()]
public string Email { get; set; }
[Required]
[Display(Name = "Name")]
public string Name { get; set; }
[Required]
[Phone]
[Display(Name = "Phone")]
public string Phone { get; set; }
[Required]
[Display(Name = "Subject")]
public string Subject { get; set; }
[Required]
[Display(Name="Message")]
public string Text { get; set; }
}
Startup.css (метод ConfigureServices)
services
.AddMvc(options =>
{
var L = services.BuildServiceProvider().GetService<IStringLocalizer>();
options.ModelBindingMessageProvider.SetValueIsInvalidAccessor(
(x) => L["The value '{0}' is invalid."]);
options.ModelBindingMessageProvider.SetValueMustBeANumberAccessor(
(x) => L["The field {0} must be a number."]);
options.ModelBindingMessageProvider.SetMissingBindRequiredValueAccessor(
(x) => L["A value for the '{0}' property was not provided.", x]);
options.ModelBindingMessageProvider.SetAttemptedValueIsInvalidAccessor(
(x, y) => L["The value '{0}' is not valid for {1}.", x, y]);
options.ModelBindingMessageProvider.SetMissingKeyOrValueAccessor(
() => L["A value is required."]);
options.ModelBindingMessageProvider.SetUnknownValueIsInvalidAccessor(
(x) => L["The supplied value is invalid for {0}.", x]);
options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor(
(x) => L["Null value is invalid.", x]);
})
.AddViewLocalization()
.AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver())
.AddDataAnnotationsLocalization(options => {
options.DataAnnotationLocalizerProvider = (type, factory) =>
{
return services.BuildServiceProvider().GetService<IStringLocalizer>();
};
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddTransient<IStringLocalizer, Services.XMLStringLocalizerService>();
В моем файле локализации xml (мой сервися не использую файлы ресурсов) У меня есть следующие строки:
"Поле {0} не является допустимым номером телефона."- отлично работает
«Поле {0} обязательно» - не работает, потому что служба никогда не получает ни одного обязательного сообщения, которое выглядит следующим образом.
Так что любая идея о том, что ямне не хватает?
Я знал, что там мало таких идей, как 1) Установить ErrorMessage 2) Создать новый класс, который унаследовал класс RequiredArtibbute и установить сообщение по умолчанию в конструкторе класса
Но моя цель - изменить сообщение DEFAULT для RequierdAtrribute