|
|
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
Для имени пользователя имею такой атрибут [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 уже это предусмотрено и есть какой-нибудь подходящий атрибут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2012, 16:43 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
user7320, Самое простое, это установить русский (локализованный) MVC либо в исходниках есть файл MVCResources там поправить но придется пересобирать сборку.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2012, 18:17 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
если просто , то попробуйте так [Required(ErrorMessage = "нужно ввести!")] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2012, 18:59 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
http://msdn.microsoft.com/ru-ru/library/system.componentmodel.dataannotations.ivalidatableobject.aspx http://msdn.microsoft.com/ru-ru/library/system.componentmodel.idataerrorinfo.aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2012, 20:16 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
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 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2012, 08:06 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
user7320Мне нужно только локализовать сообщения об ошибках - вся встроенная логика валидации меня устраивает, я не хочу её переписывать. Если я не ошибаюсь, атрибут Display в четвёрке может юзать ресурсы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2012, 08:41 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
МСУuser7320Мне нужно только локализовать сообщения об ошибках - вся встроенная логика валидации меня устраивает, я не хочу её переписывать. Если я не ошибаюсь, атрибут Display в четвёрке может юзать ресурсы. Не могли бы вы привести короткий пример использования этого для локализации или дать ссылку? Вот создал я файл ресурсов со словарём для каждой локали. Как теперь это использовать с атрибутом Display? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2012, 11:57 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
Меня интересует организация ресурсов. Как лучше - на каждую вьюху по файлу ресурсов, на каждую группю вьюх, соответствующих контроллеру, или на всё приложение в целом один файл ресурсов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2012, 12:43 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
Точнее, там же ещё для моделей надо. Вобщем, это что, на каждый такой объект структуры проекта (на каждую модель, на вьюхи этой модели и т. д.) по файлу ресурсов? Что-то много их будет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2012, 12:45 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
И мне всё же непонятно, как сконструировать сообщение об ошибке, чтобы оно содержало Display.Name. Ну т. е. вот есть у меня так: Код: c# 1. 2. 3. Тут вместо <> надо подставить значение Display.Name. Как строка Required.ErrorMessage может получить значение Display.Name? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2012, 12:50 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
user7320И мне всё же непонятно, как сконструировать сообщение об ошибке, чтобы оно содержало Display.Name. Ну т. е. вот есть у меня так: Код: c# 1. 2. 3. Тут вместо <> надо подставить значение Display.Name. Как строка Required.ErrorMessage может получить значение Display.Name? Это как быстрое решение.. в даннном случае вы же видите имя поля, напишите его. А вообще-то наверное надо идти путем разных ресурсов. В одной из книг в примерах был сайт на двух языках, они использовали ресурсы для сообщений и текста на разных языках. Вспомню - напишу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2012, 12:55 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
user7320Не могли бы вы привести короткий пример использования этого для локализации или дать ссылку? Вот создал я файл ресурсов со словарём для каждой локали. Как теперь это использовать с атрибутом Display? DisplayName attribute from Resources? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2012, 15:18 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
МСУuser7320Не могли бы вы привести короткий пример использования этого для локализации или дать ссылку? Вот создал я файл ресурсов со словарём для каждой локали. Как теперь это использовать с атрибутом Display? DisplayName attribute from Resources? Я уже сам разобрался, спасибо. Просто не сразу дошло, что и тот подход, что в MVC 2 работал, тоже тут можно применить, только уже без обёрток. Winnipuhuser7320И мне всё же непонятно, как сконструировать сообщение об ошибке, чтобы оно содержало Display.Name. Ну т. е. вот есть у меня так: Код: c# 1. 2. 3. Тут вместо <> надо подставить значение Display.Name. Как строка Required.ErrorMessage может получить значение Display.Name? Это как быстрое решение.. в даннном случае вы же видите имя поля, напишите его. Ну, я же его поток в ресурсы затолкаю. И опять же, выбор языков должен быть. Так как заставить строку Required.ErrorMessage получить значение Display.Name? Чувствую, опять через обёртку идти надо будет - переписывать Required.ErrorMessage через стринг билдер с парамтром Display.Name. Ну или можно полностью фразу об ошибке писать сразу с именем, но это уже жёстко будет закодировано - придётся в ресурсах отслеживать, чтобы и там, и там было одинаково написано. А как отслеживать? - Глазами бегать по таблице ресурсов, ищя похожее название? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2012, 16:16 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
Вот, смотрите, есть у меня другое поле Код: c# 1. 2. 3. 4. 5. Кто его знает, что такое {0} и {2} в StringLength? Нигде об этом не написано. Я просто заменил английскую фразу подходящей русской, но что такое и как подойдут под мою замену значения из {0} и {2} можно установить только опытным путём. Вот пример использования StringLengthAttribute http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.stringlengthattribute.aspx И там просто жёстко вбивается длина символов в сообщение, совпадающая со значением для параметра MaximumLength - 4. А если я хочу контролируемо передавать эти значения, то ОПЯТЬ ОБЁРТКУ ДЕЛАТЬ? Т. е. им можно, а мне нельзя без переписывания класса? Господи, они в чём-то облегчили, а в чём-то снова осложнили жизнь - ну что сложного открыть, как этот StringLengthAttribute конструирует строку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2012, 11:01 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
Ладно, начитавшись кучи статей и книжек, более-менее понял, как это сделать... Теперь другая проблема - Разор не видит ссылки на проекты даже в том же решении. Вообще! Т. е. делаю в том же решении отдельный проект для ресурсов локалей (так в книжках советуют и статьях), ссылаюсь на него в проекте сайта. Модели ссылку видят, контроллеры видят, представления через asp.net синтаксис видят (по словам очевидцев), представления через Razor синтаксис не видят! Пробовал все рекомендации - в главном веб конфиге делал ссылку на сборку (у одного пользователя "проканало"), в веб конфиге представлений - ссылку на пространство имён, компилил и так, и этак в разных порядках, чистил темп ASP.NET в папке Windows, пробовал использовать using в представлении - ничего не помогает. Разор не может получить доступ к ссылкам на другие проекты, сборки и вообще. Пока нашёл два способа решения (оба мне не нравятся): 1. Сделать во внешней сборке, но обернуть эту сборку моделькой из проекта сайта и уже из этой модельки пытаться подставлять локализируемый текст в представления через Разор. 2. Сделать папку с локалями в проекте сайта и не мучиться со ссылками на проекты. Кто что думает по этому поводу, и как заставить Разор увидеть ссылки на другие проекты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2012, 17:02 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
Отсюда http://stackoverflow.com/questions/4953330/razor-based-view-doesnt-see-referenced-assemblies ничего не помогло. Только предложение по обёртке взял на заметку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2012, 17:03 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
VS 2010, .NET F 4.0, ASP.NET MVC 3, Razor - если что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2012, 17:04 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
user7320Вот, смотрите, есть у меня другое поле Код: c# 1. 2. 3. 4. 5. Кто его знает, что такое {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 не указано, как построитель строки сообщения об ошибке выбирает эти атрибуты! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 12:35 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
user7320В http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.stringlengthattribute.aspx не указано, как построитель строки сообщения об ошибке выбирает эти атрибуты! Т. е. не указано, как он выбирает эти параметры для строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 12:36 |
|
||
|
MVC 3 - Локализация валидационных сообщений
|
|||
|---|---|---|---|
|
#18+
user7320user7320Вот, смотрите, есть у меня другое поле Код: c# 1. 2. 3. 4. 5. Кто его знает, что такое {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". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2012, 15:34 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=37609072&tid=1359782]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
212ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 565ms |

| 0 / 0 |
