локализовать аннотации к сообщениям по умолчанию ([Обязательно] [StringLength] и т. д.) - PullRequest
21 голосов
/ 21 сентября 2010

если я украслю свойства моих 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"

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

Ответы [ 2 ]

37 голосов
/ 21 сентября 2010

Вы можете использовать свойство 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, чтобы увидеть имена используемых ключей.

10 голосов
/ 20 января 2013

Существует гораздо лучшее решение, использующее 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 связанный вопрос - Mvc 3.0 DataAnnotations Локализация

...