powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC 3 - Локализация валидационных сообщений
20 сообщений из 20, страница 1 из 1
MVC 3 - Локализация валидационных сообщений
    #37607899
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для имени пользователя имею такой атрибут

[Display(Name = "Имя пользователя")]

Вроде, локализовал. Но при невведённом имени пользователя пишет вот это:

"The Имя пользователя field is required."

Поиск по всему решению по "field is required" дал ссылку на текст в ява-скрипет, где было "This field is required." Т. е. никаких "The" вначале не стояло.

Валидационное сообщение выводится в представлении так

@Html.ValidationMessageFor(m => m.UserName)

Там есть второй параметры для ValidationMessageFor, который представляет собой сообщение взамен "The Имя пользователя field is required." Но этот параметр не умеет подставлять "Имя пользователя" - т. е. значение из Display.Name. А в исходник не пускает.

Как сделать так, чтобы и "Имя пользователя" бралось из Display.Name, и сообщение было локализовано? По отдельности я эти условия удовлетворил, а как вместе?

Тут http://adamyan.blogspot.com/2010/02/aspnet-mvc-2-localization-complete.html дядя в главе 5 предлагает свой класс-обёртку над DisplayName сделать. Но, во-первых, это для MVC 2 (в MVC 3 вместо DisplayName есть только Display), а во-вторых, это муторно. Это что, для того, только чтобы такую мелочь решить, надо обёртки делать?

Есть ли способ проще? Может, там в MVC 3 уже это предусмотрено и есть какой-нибудь подходящий атрибут?
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37608034
Pyx111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
user7320,
Самое простое, это установить русский (локализованный) MVC
либо в исходниках есть файл MVCResources там поправить но придется пересобирать сборку....
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37608103
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если просто
, то попробуйте так

[Required(ErrorMessage = "нужно ввести!")]
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37608187
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37608626
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pyx111user7320,
Самое простое, это установить русский (локализованный) MVC
либо в исходниках есть файл MVCResources там поправить но придется пересобирать сборку....
Плохое решение. И не подходит для локализации на многих языках сразу.

МСУ http://msdn.microsoft.com/ru-ru/library/system.componentmodel.dataannotations.ivalidatableobject.aspx
http://msdn.microsoft.com/ru-ru/library/system.componentmodel.idataerrorinfo.aspx
Мне нужно только локализовать сообщения об ошибках - вся встроенная логика валидации меня устраивает, я не хочу её переписывать.

Впрочем, я уже набрёл на некоторые способы решения - похоже, без обёрток не обойтись.

Хотя постойте... Кто-нибудь может написать небольшой пример, как конкретно сделать локализацию с помощью этого http://msdn.microsoft.com/en-us/library/system.web.mvc.html.validationextensions.resourceclasskey.aspx ?
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37608638
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Мне нужно только локализовать сообщения об ошибках - вся встроенная логика валидации меня устраивает, я не хочу её переписывать.
Если я не ошибаюсь, атрибут Display в четвёрке может юзать ресурсы.
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37608928
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУuser7320Мне нужно только локализовать сообщения об ошибках - вся встроенная логика валидации меня устраивает, я не хочу её переписывать.
Если я не ошибаюсь, атрибут Display в четвёрке может юзать ресурсы.
Не могли бы вы привести короткий пример использования этого для локализации или дать ссылку? Вот создал я файл ресурсов со словарём для каждой локали. Как теперь это использовать с атрибутом Display?
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37609049
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня интересует организация ресурсов. Как лучше - на каждую вьюху по файлу ресурсов, на каждую группю вьюх, соответствующих контроллеру, или на всё приложение в целом один файл ресурсов?
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37609062
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее, там же ещё для моделей надо. Вобщем, это что, на каждый такой объект структуры проекта (на каждую модель, на вьюхи этой модели и т. д.) по файлу ресурсов? Что-то много их будет...
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37609072
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И мне всё же непонятно, как сконструировать сообщение об ошибке, чтобы оно содержало Display.Name. Ну т. е. вот есть у меня так:

Код: c#
1.
2.
3.
[Required(ErrorMessage="Нужно ввести \" <>\"!")]
[Display(Name = "Имя пользователя")]
public string UserName { get; set; }



Тут вместо <> надо подставить значение Display.Name. Как строка Required.ErrorMessage может получить значение Display.Name?
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37609092
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320И мне всё же непонятно, как сконструировать сообщение об ошибке, чтобы оно содержало Display.Name. Ну т. е. вот есть у меня так:

Код: c#
1.
2.
3.
[Required(ErrorMessage="Нужно ввести \" <>\"!")]
[Display(Name = "Имя пользователя")]
public string UserName { get; set; }



Тут вместо <> надо подставить значение Display.Name. Как строка Required.ErrorMessage может получить значение Display.Name?

Это как быстрое решение.. в даннном случае вы же видите имя поля, напишите его.

А вообще-то наверное надо идти путем разных ресурсов. В одной из книг в примерах был сайт на двух языках, они использовали ресурсы для сообщений и текста на разных языках. Вспомню - напишу.
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37609427
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Не могли бы вы привести короткий пример использования этого для локализации или дать ссылку? Вот создал я файл ресурсов со словарём для каждой локали. Как теперь это использовать с атрибутом Display?
DisplayName attribute from Resources?
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37609566
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУuser7320Не могли бы вы привести короткий пример использования этого для локализации или дать ссылку? Вот создал я файл ресурсов со словарём для каждой локали. Как теперь это использовать с атрибутом Display?
DisplayName attribute from Resources?
Я уже сам разобрался, спасибо. Просто не сразу дошло, что и тот подход, что в MVC 2 работал, тоже тут можно применить, только уже без обёрток.
Winnipuhuser7320И мне всё же непонятно, как сконструировать сообщение об ошибке, чтобы оно содержало Display.Name. Ну т. е. вот есть у меня так:

Код: c#
1.
2.
3.
[Required(ErrorMessage="Нужно ввести \" <>\"!")]
[Display(Name = "Имя пользователя")]
public string UserName { get; set; }



Тут вместо <> надо подставить значение Display.Name. Как строка Required.ErrorMessage может получить значение Display.Name?

Это как быстрое решение.. в даннном случае вы же видите имя поля, напишите его.
Ну, я же его поток в ресурсы затолкаю. И опять же, выбор языков должен быть.


Так как заставить строку Required.ErrorMessage получить значение Display.Name? Чувствую, опять через обёртку идти надо будет - переписывать Required.ErrorMessage через стринг билдер с парамтром Display.Name. Ну или можно полностью фразу об ошибке писать сразу с именем, но это уже жёстко будет закодировано - придётся в ресурсах отслеживать, чтобы и там, и там было одинаково написано. А как отслеживать? - Глазами бегать по таблице ресурсов, ищя похожее название?
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37610575
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, смотрите, есть у меня другое поле

Код: c#
1.
2.
3.
4.
5.
[Required]
[StringLength(100, ErrorMessage = "{0} должен иметь по крайней мере {2} символов.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Новый пароль")]
public string NewPassword { get; set; }


Кто его знает, что такое {0} и {2} в StringLength? Нигде об этом не написано. Я просто заменил английскую фразу подходящей русской, но что такое и как подойдут под мою замену значения из {0} и {2} можно установить только опытным путём.

Вот пример использования StringLengthAttribute http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.stringlengthattribute.aspx
И там просто жёстко вбивается длина символов в сообщение, совпадающая со значением для параметра MaximumLength - 4. А если я хочу контролируемо передавать эти значения, то ОПЯТЬ ОБЁРТКУ ДЕЛАТЬ? Т. е. им можно, а мне нельзя без переписывания класса? Господи, они в чём-то облегчили, а в чём-то снова осложнили жизнь - ну что сложного открыть, как этот StringLengthAttribute конструирует строку?
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37618532
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, начитавшись кучи статей и книжек, более-менее понял, как это сделать...

Теперь другая проблема - Разор не видит ссылки на проекты даже в том же решении. Вообще! Т. е. делаю в том же решении отдельный проект для ресурсов локалей (так в книжках советуют и статьях), ссылаюсь на него в проекте сайта. Модели ссылку видят, контроллеры видят, представления через asp.net синтаксис видят (по словам очевидцев), представления через Razor синтаксис не видят!

Пробовал все рекомендации - в главном веб конфиге делал ссылку на сборку (у одного пользователя "проканало"), в веб конфиге представлений - ссылку на пространство имён, компилил и так, и этак в разных порядках, чистил темп ASP.NET в папке Windows, пробовал использовать using в представлении - ничего не помогает. Разор не может получить доступ к ссылкам на другие проекты, сборки и вообще.

Пока нашёл два способа решения (оба мне не нравятся):

1. Сделать во внешней сборке, но обернуть эту сборку моделькой из проекта сайта и уже из этой модельки пытаться подставлять локализируемый текст в представления через Разор.

2. Сделать папку с локалями в проекте сайта и не мучиться со ссылками на проекты.

Кто что думает по этому поводу, и как заставить Разор увидеть ссылки на другие проекты?
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37618534
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отсюда http://stackoverflow.com/questions/4953330/razor-based-view-doesnt-see-referenced-assemblies ничего не помогло. Только предложение по обёртке взял на заметку.
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37618538
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VS 2010, .NET F 4.0, ASP.NET MVC 3, Razor - если что.
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37623782
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Вот, смотрите, есть у меня другое поле

Код: c#
1.
2.
3.
4.
5.
[Required]
[StringLength(100, ErrorMessage = "{0} должен иметь по крайней мере {2} символов.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Новый пароль")]
public string NewPassword { get; set; }


Кто его знает, что такое {0} и {2} в StringLength? Нигде об этом не написано. Я просто заменил английскую фразу подходящей русской, но что такое и как подойдут под мою замену значения из {0} и {2} можно установить только опытным путём.

Вот пример использования StringLengthAttribute http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.stringlengthattribute.aspx
И там просто жёстко вбивается длина символов в сообщение, совпадающая со значением для параметра MaximumLength - 4. А если я хочу контролируемо передавать эти значения, то ОПЯТЬ ОБЁРТКУ ДЕЛАТЬ? Т. е. им можно, а мне нельзя без переписывания класса? Господи, они в чём-то облегчили, а в чём-то снова осложнили жизнь - ну что сложного открыть, как этот StringLengthAttribute конструирует строку?
Опытным путём было установлено, что для StringLengthAttribute 0 - это Name, 1 - это MaximumLength, 2 - это MinimumLength.

Для CompareAttribute всё немного по-другому: 0 - это DisplayAttribute.Name для свойства, указанного в CompareAttribute.otherProperty, 1 - это имя свойства, указанного в CompareAttribute.otherProperty, а 2 и далее не существует.

И вот вопрос - ГДЕ всё это расписано?!
В http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.stringlengthattribute.aspx
не указано, как построитель строки сообщения об ошибке выбирает эти атрибуты!
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37623785
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320В http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.stringlengthattribute.aspx
не указано, как построитель строки сообщения об ошибке выбирает эти атрибуты!
Т. е. не указано, как он выбирает эти параметры для строки.
...
Рейтинг: 0 / 0
MVC 3 - Локализация валидационных сообщений
    #37725601
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320user7320Вот, смотрите, есть у меня другое поле

Код: c#
1.
2.
3.
4.
5.
[Required]
[StringLength(100, ErrorMessage = "{0} должен иметь по крайней мере {2} символов.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Новый пароль")]
public string NewPassword { get; set; }


Кто его знает, что такое {0} и {2} в StringLength? Нигде об этом не написано. Я просто заменил английскую фразу подходящей русской, но что такое и как подойдут под мою замену значения из {0} и {2} можно установить только опытным путём.

Вот пример использования StringLengthAttribute http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.stringlengthattribute.aspx
И там просто жёстко вбивается длина символов в сообщение, совпадающая со значением для параметра MaximumLength - 4. А если я хочу контролируемо передавать эти значения, то ОПЯТЬ ОБЁРТКУ ДЕЛАТЬ? Т. е. им можно, а мне нельзя без переписывания класса? Господи, они в чём-то облегчили, а в чём-то снова осложнили жизнь - ну что сложного открыть, как этот StringLengthAttribute конструирует строку?
Опытным путём было установлено, что для StringLengthAttribute 0 - это Name, 1 - это MaximumLength, 2 - это MinimumLength.

Для CompareAttribute всё немного по-другому: 0 - это DisplayAttribute.Name для свойства, указанного в CompareAttribute.otherProperty, 1 - это имя свойства, указанного в CompareAttribute.otherProperty, а 2 и далее не существует.

И вот вопрос - ГДЕ всё это расписано?!
В http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.stringlengthattribute.aspx
не указано, как построитель строки сообщения об ошибке выбирает эти атрибуты!

Нашёл. )))

http://msdn.microsoft.com/en-us/library/ff953182(v=PandP.50).aspx , раздел "Understanding Message Template Tokens".
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC 3 - Локализация валидационных сообщений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]