Локализовать сообщения аннотации сообщений по умолчанию ([обязательно] [StringLength] и т.д.)
если я украшаю свойства моих ViewModels такими атрибутами:
public class Vm
{
[Required]
[StringLength(35)]
public string Name {get;set;}
}
Я собираюсь получить английские сообщения для проверки:
"this field is required"
"The field Name must be a string with a maximum length of 35"
как я могу их перевести?
Ответы
Ответ 1
Вы можете использовать свойство ErrorMessageResourceName
:
[Required(ErrorMessageResourceName = "SomeResource")]
[StringLength(30, ErrorMessageResourceName = "SomeOtherResource")]
public string Name { get; set; }
Вы можете проверить этот пост в блоге для примера.
UPDATE:
В Application_Start
:
DefaultModelBinder.ResourceClassKey = "Messages";
И в файле Messages.resx
вам нужно добавить настраиваемые сообщения об ошибках. Используйте Reflector, чтобы просмотреть сборки System.Web.Mvc
и System.ComponentModel.DataAnnotations
, чтобы увидеть имена клавиш, которые будут использоваться.
Ответ 2
Существует намного лучшее решение, использующее asp.net MVC 3 в наши дни, если кто-то ищет новый и гораздо лучший подход.
http://blog.gauffin.org/2011/09/easy-model-and-validation-localization-in-asp-net-mvc3/
Например:
public class UserViewModel
{
[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Resources.LocalizedStrings))]
[LocalizedDisplayName(ErrorMessageResourceName = "UserId", ErrorMessageResourceType = typeof(Resources.LocalizedStrings))]
[LocalizedDescription(ErrorMessageResourceName = "UserIdDescription", ErrorMessageResourceType = typeof(Resources.LocalizedStrings))]
public int Id { get; set; }
}
Вопрос, связанный с SO,
Локализация DataAnnotations Mvc 3.0