Я пишу веб-приложение ASP .Net Core с проверкой аннотации данных. В атрибутах, описывающих свойства модели, я определяю ErrorMessageResourceType и ErrorMessageResourceName.
Файлы ресурсов размещаются в другом проекте вне основного решения приложения. (с использованием интерфейса командной строки dotnet с поддержкой редактора сообщества Visual Studio 2017)
В моей модели есть:
[Required(AllowEmptyStrings = false, ErrorMessageResourceType = typeof(Resources.NewPetDataValidation),
ErrorMessageResourceName = "EmptyField")]
[StringLength(30, ErrorMessageResourceType = typeof(Resources.NewPetDataValidation),
ErrorMessageResourceName = "NameMaxLength")]
public string Name {get; set;}
В проекте Resources я создал отдельный файл .resx для каждого языка, то есть NewPetDataValidation.en.resx, NewPetDataValidation.de.resx.
Затем в редакторе ресурсов Visual Studio я добавил строки ресурсов в каждый файл с именами ресурсов.
Для английского языка: Имя: EmptyField Значение: Пустое поле!
Для немецкого языка: Имя: EmptyField Значение: Leer Feld!
и т.д ...
В представлении Razor у меня есть: @ Html.ValidationMessageFor (Model => Model.Name, null, new {@style = "color: red"})
Все работает нормально, если у меня нет доступа к модели более чем к одной строке ресурса в определенном файле .resx. Я уверен, что ErrorMessageResourceName соответствует определенным именам ресурсов.
С другой стороны, если я создаю отдельные файлы .resx для каждой переведенной фразы, приложение будет работать. Однако я не думаю, что создание такого количества файлов .resx - хорошая идея.
Заранее спасибо за вашу поддержку.