- •А.А. Волосевич
- •5.2. Веб-Приложение
- •5.3. Структура aspx-файла
- •1. Директивы страницы.
- •2. Серверные элементы управления и серверная форма.
- •5.4. Директивы страницы
- •5.5. Класс system.Web.Ui.Page
- •5.6. ЖИзненный цикл страницы
- •1. Подготовка страницы к выполнению
- •1.1. Событие PreInit
- •1.2. Событие Init
- •1.3. Событие InitComplete
- •1.4. Восстановление состояния представления
- •1.5. Обработка данных, принятых в результате возврата формы
- •1.6. Событие PreLoad
- •1.7. Событие Load
- •1.8. Обработка динамически созданных элементов управления
- •2. Обработка возврата формы
- •2.1. Обнаружение изменений в состоянии элементов управления
- •2.2. Обработка серверного события возврата формы
- •2.3. Событие LoadComplete
- •3.4. Генерирование разметки
- •3.5. Событие Unload
- •5.7. Общий обзор серверных элементов управления
- •5.8. Элементы управления html
- •5.9. Элементы управления web
- •5.10. Проверочные элементы управления
- •5.11. Эталонные страницы и темы
- •5.12. Некоторые приёмы работы со страницами
- •5.13. Связывание с данными
- •5.14. Списковые элементы управления
- •5.15. Элементы управления для Источников данных
- •5.16. Таблицы, связанные с данными
- •5.17. ОтоБражение отдельных записей
- •5.18. Конфигурирование веб-приложений
- •5.19. Инфраструктура обработки зАпроса
- •5.20. Веб-приложение и файл global.Asax
- •5.21. Модель поставщиков
- •5.22. Поддержка Сохранения Состояния
- •5.23. Кэширование в aSp.Net
- •5.24. Обеспечение безопасносТи в веб-приложениях
- •5.25. Управление членством и роЛями
- •5.26. Профили пользователя
- •5.27. Локализация и ресурсы
- •5.28. Пользовательские элементы управления
5.27. Локализация и ресурсы
Под ресурсом в данном параграфе понимается строка, изображение или данные иного типа, хранящиеся отдельно от исполняемых файлов (кода). Ресурсы позволяют изменять вид приложения, не производя его перекомпиляцию и, прежде всего, используются в задачах локализации, то есть адаптации вида приложения под конкретный язык или культуру. ASP.NET предлагает унифицированный подход для работы с ресурсами, в котором центральную роль играет соответствующий API и файлы ресурсов.
Файл ресурсов – это обычный XML-файл, для которого принято использовать расширение *.resx. В файле хранятся данные в виде набора пар «имя ресурса-значение ресурса». Visual Studio позволяет редактировать файлы ресурсов, скрывая внутренние детали их реализации.
В .NET Framework имеется набор классов, позволяющих прочитать файл ресурсов и извлечь из него требуемые значения. При использовании ASP.NET работа с ресурсами упрощена. Прежде всего, заметим, что с точки зрения приложения ASP.NET ресурсы делятся на глобальные и локальные. Глобальные ресурсы приложения хранятся в специальном каталоге приложения App_GlobalResources. Пусть, например, в этот каталог помещен файл Resource.resx, содержащий строковый ресурс name со значением Alex. Тогда доступ к этому ресурсу из кода страницы или из программного кода может быть выполнен так:
tbxSearch.Text = Resources.Resource.name;
Можно считать что ASP.NET создает для каждого глобального ресурса строго типизированный класс, имя которого совпадает с именем файла ресурсов (в нашем случае – Resource), а сами ресурсы доступны как свойства этого класса. Сгенерированные классы находятся в пространстве имен Resources.
В именовании файлов ресурсов имеется один нюанс, связанный непосредственно с локализацией. Дело в том, что исполняющая среда пытается найти файл ресурсов, связанный с контекстом культуры потока выполнения. Предполагается, что само имя файла непосредственно содержит указание на идентификатор культуры. Так, в предыдущем примере, имя Resource.resx обозначает ресурсы, используемые по умолчанию (если соответствие не будет найдено), имя Resource.en.resx обозначает ресурсы англоязычных стран, а имя Resource.en-US.resx – ресурсы для английского языка США. Контекст культуры для элементов управления определяет свойство CurrentUICulture класса Thread. Таким образом, при наличии файла Resource.de-DE.resx с соответствующим свойством name, следующий код будет использовать немецкий ресурс:
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
tbxSearch.Text = Resources.Resource.name;
В реальных веб-приложениях информацию о культуре передает браузер клиента и она подобным образом обычно не устанавливается. Можно определить регион, используемый по умолчанию, в файле web.config:
<globalization enableClientBasedCulture="true"
culture="de-DE" uiCulture="de-DE"/>
Для указания региона для отдельной страницы можно применить директиву страницы и её атрибуты Culture и UICulture.
В ASP.NET 2.0 работа с ресурсами страниц еще более облегчилась. При создании страницы в Visual Studio достаточно переключится на дизайнер страниц и выполнить команду Tools | Generate Local Resources. Для страницы будет автоматически выполнена генерация файла локальных ресурсов. Он размещается в папке App_LocalResources, и его имя – такое же как у страницы, но с расширением .resx. Имена ресурсов в этом файле построены по схеме: «имя элемента управления Resource номер.имя свойства». А если обратиться к коду разметки страницы, то у элементов управления можно заметить специальные атрибуты meta:resourcekey:
<asp:ImageButton ID="btnSearchGo" runat="server"
meta:resourcekey="btnSearchGoResource1" />
Несложно понять, что именно при помощи этих атрибутов связывается элемент управления и группа ресурсов с соответствующим именем в файле ресурсов. Все последующие ресурсы, специфические для данного региона, придется добавлять вручную, копируя сгенерированные ресурсы и присваивая им соответствующее имя (например, Default.aspx.en-US.resx).
Если необходимо локализовать не элемент управления на странице, а статический текст страницы, то следует воспользоваться новым элементом управления Localize. Он должен охватывать статический текст, тогда эта часть страницы будет автоматически включена в процесс генерирования ресурсов.