Подтвердить что ты не робот

Локализовать сообщения аннотации сообщений по умолчанию ([обязательно] [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"

как я могу их перевести?

4b9b3361

Ответ 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