MVC локализация связующего по умолчанию для модели - PullRequest
6 голосов
/ 17 марта 2010

В настоящее время я пытаюсь выяснить, как локализовать сообщения об ошибках, генерируемые MVC. Позвольте мне в качестве примера использовать связыватель модели по умолчанию, чтобы я мог объяснить проблему.

Предполагается, что у меня есть форма, где пользователь вводит свой возраст. Затем пользователь вводит «десять» в форму, но вместо получения ожидаемой ошибки

«Возраст должен быть от 18 до 25 лет».

сообщение

"Значение 'десять' недопустимо для возраста."

отображается.

Свойство возраста объекта определено ниже:

    [Range(18, 25, ErrorMessageResourceType = typeof (Errors), 
        ErrorMessageResourceName = "Age", ErrorMessage = "Range_ErrorMessage")]    
    public int Age { get; set; }

После некоторого копания я замечаю, что этот текст ошибки происходит из System.Web.Mvc.Resources.DefaultModelBinder_ValueInvalid в файле MvcResources.resx.

Теперь, как можно создавать локализованные версии этого файла?

Как решение, например, я должен загрузить исходный код MVC и добавить MvcResources.en_GB.resx, MvcResources.fr_FR.resx, MvcResources.es_ES.resx и MvcResources.de_DE.resx, а затем скомпилировать свою собственную версию MVC.dll?

Но мне не нравится эта идея. Кто-нибудь еще знает лучший способ?

Ответы [ 3 ]

5 голосов
/ 17 марта 2010

См. http://forums.asp.net/p/1512140/3608427.aspx, прокрутите вниз до ответа Брэда Уилсона в нижней части этой страницы (суббота, 9 января 2010 г., 15:20). В DefaultModelBinder есть статические свойства, которые можно настроить для локализации общих сообщений об ошибках.

Причина, по которой общее сообщение об ошибке используется вместо вашего сообщения [Range], заключается в том, что [Range] предоставляет сообщение об ошибке validation , но в данном конкретном случае это ошибка binding . Абсолютно невозможно, чтобы фреймворк мог надеяться преобразовать строку «десять» в Int32, поэтому он даже не может запустить валидатор [Range]. Это то, что контролирует ключ «PropertyValueInvalid», упомянутый в этом форуме.

3 голосов
/ 03 июня 2012

В MVC3 выполните следующие действия для изменения сообщений по умолчанию:

  1. добавьте папку App_GlobalResources на ваш сайт ASP.NET
  2. добавить новый файл ресурсов, назовите его f.ex. MyResources.resx
  3. добавить эти ключи
    • PropertyValueRequired : Требуется значение.
    • PropertyValueInvalid : значение {0} недопустимо для {1}.
  4. в Application_Start файла global.asax.cs добавить строку DefaultModelBinder.ResourceClassKey = "MyResources";
0 голосов
/ 17 марта 2010

Вы пробовали: IDataErrorInfo свойство

Эта статья поможет

...