Локализация сообщения об ошибке в проверке Silverlight - PullRequest
1 голос
/ 12 ноября 2009

Я хочу использовать функцию локализации для сообщений проверки, например, -

    [Required(ErrorMessageResourceName = "RequiredField", ErrorMessageResourceType = typeof( ))]
     public string someText
     { get... set...}

Я использую шаблон MVVM, поэтому это свойство находится в моей модели (это другой проект в том же решении silverlight), а все мои ресурсы локализации находятся в App.current.Resources. Как я могу установить ErrorMessageResourceType для ресурсов моего приложения?

Пожалуйста, предложите.

Заранее спасибо
Sai

Ответы [ 3 ]

1 голос
/ 24 ноября 2009

Ну, очевидно, локализация сообщений об ошибках не так проста. Предполагается, что вы добавите файл ресурса в проект MyApp.Web, то есть на сайт asp.net, на котором размещено ваше приложение silverlight, затем добавьте этот ресурс в приложение silverlight, после чего вы сможете выполнить код, указанный в вашем вопросе. после некоторых настроек следуйте инструкциям ниже

В этом разделе рассматривается, как ошибка сообщения могут быть локализованы путем сохранения их в файлах ресурсов и обмена их по уровням.

В примере используются .NET RIA Services прохождение проекта в качестве базы проект и строит поверх него.

Допустим, мы хотим добавить проверку ошибка в качестве ресурса для поля LoginID.

  • Создайте новую папку ‘Resources в проекте HRApp.Web. (серверный проект)

  • Добавьте новый файл ресурсов в эту папку и назовите его ValidationErrorResources.resx

  • Дважды щелкните файл .RESX, чтобы вызвать конструктор ресурсов. страница

  • Добавить новый строковый ресурс с именем = LoginIDValidationError и Значение = "Поле логина обязательно для заполнения"

  • Измените модификатор доступа на «Public», нажав на «Access». Модификатор "выпадающего интерфейса и выбора «Public» и сохраните проект. это генерирует ValidationErrorResources класс в HRApp.Web.Resources Пространство имен.

  • Открыть файл «OrganizationService.metadata.cs» и добавьте следующее поле «Обязательно» подтверждение для члена LoginID. Уточнить имя ресурса сообщения об ошибке и значения типа ресурса, установив соответствующие атрибуты-члены как показано ниже.

[Обязательный (ErrorMessageResourceName = "LoginIDValidationError", ErrorMessageResourceType = typeof (ValidationErrorResources))]

публичная строка LoginID;

Теперь мы хотим поделиться этим ресурсом файл в проекте Silverlight (клиентский проект). Для этого

  • Создание папки Web \ Resources в проекте HRApp (структура папок должна соответствовать пространство имен файла ресурсов на сервере сторона)

  • Выберите папку «Ресурсы» и откройте диалоговое окно «Добавить существующий файл», перейдите к ресурсу на стороне сервера расположение папки с файлами

  • Выберите ValidationErrorResources.resx и ValidationErrorResources.designer.cs файлы, и добавьте их в качестве файлов ссылок на проект Silverlight. Спасти файл проекта

  • Откройте файл HRApp.csproj в блокноте, найдите раздел, где .designer.cs файл включен и добавить выделенные 3 строки к этому раздел

   <Compile
 Include="..\HRApp.Web\Resources\ValidationErrorResources.Designer.cs">

     <AutoGen>True</AutoGen>

     <DesignTime>True</DesignTime>

     <DependentUpon>ValidationErrorResources.resx</DependentUpon>

     <Link>Web\Resources\ValidationErrorResources.Designer.cs</Link>
 </Compile>
  • Сохраните файл проекта и перезагрузите проект в Visual Studio

  • Постройте решение и запустите

Теперь, когда проверка завершается неудачно для поле LoginID сообщение об ошибке из файла ресурсов отображается на пользователь. Файл ресурсов теперь может быть настроен для хранения конкретной локали Сообщения об ошибках.

0 голосов
/ 24 марта 2010

Это решение почти сработало для меня. Мне пришлось принять некоторые меры для работы с моделью данных (edmx), расположенной в одном проекте, DataDomainService (Ria) в другом и уровнем доступа Silverlight в другом проекте. Когда я компилирую эквивалент HRApp в моей ситуации, метаданные, содержащие информацию проверки для некоторого свойства, не генерируются. Это говорит о том, что клиент не имеет доступа к типу ValidationErrorResources. Но после выполнения всех инструкций, упомянутых выше, а также некоторых других, чтобы получить правильное пространство имен ресурса, клиент МОЖЕТ получить доступ к ValidationErrorResources. Это работает, если я сам напишу это в сгенерированный класс Silverlight. Похоже, что такое разделение проектов не совсем поддерживается генератором классов ... Но, в любом случае, спасибо, этот пост был очень полезным, и, возможно, я сделаю все это через пару дней. : D

0 голосов
/ 11 декабря 2009

Когда я делал это недавно, это очень помогло: http://forums.asp.net/t/1433699.aspx

В частности "... файл ресурса должен быть преобразован в класс, прежде чем он сможет ссылаться на него в typeof ErrorMessageResourceType в аннотации данных ..."

Также есть несколько других полезных хитов от основных поисковых систем: http://www.liquidjelly.co.uk/supersearch/?q=silverlight%20dataannotations%20localization&lang=en-GB

...