Общие сведения о ресурсах страниц ASP.NET
Обновлен: Ноябрь 2007
При создании страниц, которые будут читать люди, говорящие на разных языках, необходимо предусмотреть возможность, позволяющую читателям просматривать эти страницы на своем собственном языке. Один способ сделать это состоит в том, чтобы создать несколько вариантов страницы на разных языках. Однако если исходная страница периодически меняется, то этот способ может оказаться весьма трудоемким, с высокой вероятностью ошибок и сложным в поддержке.
ASP.NET позволяет создавать страницу, которая может получать содержимое и прочие данные, основываясь на языке, выбранном для веб-обозревателя, или на явном выборе языка пользователем. К содержимому и другим данным страница обращается как к ресурсам, и такие данные могут храниться в файлах ресурсов или в других источниках.
На странице ASP.NET элементы управления настраиваются для получения значений свойств из ресурсов. Во время выполнения выражения ресурсов заменяются ресурсами из соответствующих файлов.
Файлы ресурсов
Файл ресурсов — это XML-файл, содержащий строки, которые требуется перевести на другие языки, или пути к рисункам. Файл ресурсов содержит пары «ключ-значение». Каждая пара является отдельным ресурсом. Регистр букв в именах ключей не учитывается. Например, файл ресурсов может содержать ресурс с ключом Button1 и значением Submit.
Отдельный файл ресурсов создается для каждого языка (например для английского или французского) или для каждого языка с региональными параметрами (например для английского (Великобритания) или английского (США)). Каждый локализованный файл ресурсов имеет те же пары «ключ/значение»; разница заключается только в том, что в локализованном файле ресурсов может быть меньше ресурсов, чем в файле ресурсов по умолчанию. Процесс перехода к встроенному базовому языку затем обрабатывает загрузку нейтрального или установленного по умолчанию ресурса.
Файлы ресурсов в ASP.NET имеют расширение RESX. Во время выполнения RESX-файл компилируется в сборку, на которую иногда делаются ссылки как на вспомогательную сборку. Поскольку RESX-файлы компилируются динамически, как страницы ASP.NET, нет необходимости создавать сборки ресурсов. Компиляция конденсирует несколько файлов ресурсов подобных языков в одну сборку.
Создание файлов ресурсов начинается с создания основного RESX-файла. Для каждого языка, для которого требуется поддержка, создается новый файл с тем же именем. Но в имя следует включать язык или имя языка с региональными параметрами. Список имен языков с региональными параметрами см. в описании класса CultureInfo. Например, можно создать следующие файлы:
WebResources.resx
Основной файл ресурсов. Это файл ресурсов по умолчанию (файл ресурсов базового языка).
WebResources.es.resx
Файл ресурсов для испанского языка.
WebResources.es-mx.resx
Файл ресурсов для испанского языка (Мексика).
WebResources.de.resx
Файл ресурсов для немецкого языка.
Во время выполнения ASP.NET использует файл ресурсов, наилучшим образом соответствующий значению свойства CurrentUICulture. Язык и региональные параметры пользовательского интерфейса для потока устанавливаются согласно языку и региональным параметрам пользовательского интерфейса страницы. Например, если в качестве языка и региональных параметров текущего пользовательского интерфейса установлен испанский язык, то ASP.NET использует скомпилированную версию файла WebResources.es.resx. Если не находится соответствия для языка и региональных параметров текущего пользовательского интерфейса, то ASP.NET использует ресурс базового языка. ASP.NET начинает с поиска ресурсов для указанного языка и региональных параметров. Если таковые не обнаруживаются, то выполняется поиск ресурсов для нейтрального языка и региональных параметров. Если и они не обнаруживаются, то ASP.NET загружает файл ресурсов по умолчанию. В данном примере это файл WebResource.resx.
Создание файлов ресурсов для веб-узлов ASP.NET
В ASP.NET можно создавать файлы ресурсов с разными областями действия. Можно создавать глобальные файлы ресурсов, т. е. файлы ресурсов, которые может читать любая страница или любой код конкретного веб-узла. Можно также создавать локальные файлы ресурсов, хранящие ресурсы для одной страницы ASP.NET (ASPX-файла).
Глобальные файлы ресурсов
Глобальный файл ресурсов создается путем размещения его в зарезервированной папке App_GlobalResources корневого каталога приложения. Любой RESX-файл из папки App_GlobalResources является глобальным. Кроме того, ASP.NET создает строго типизированный объект, предоставляющий простой способ программного вызова глобальных ресурсов.
Локальные файлы ресурсов
Локальный файл ресурсов — это файл, который применяется только к одной странице ASP.NET или к одному пользовательскому элементу управления (т. е. к файлу ASP.NET с расширением ASPX, ASCX или MASTER). Локальные файлы ресурсов размещаются в папках с зарезервированным именем App_LocalResources. В отличие от корневой папки App_GlobalResources, папки App_LocalResources могут находиться в любой папке приложения. Набор файлов ресурсов связывается с конкретной страницей с помощью имени файла ресурсов.
Например, если в папке App_LocalResources имеется страница с именем Default.aspx, можно создать следующие файлы:
Файл Default.aspx.resx. Это локальный файл ресурсов по умолчанию (файл ресурсов базового языка), который используется при отсутствии файла ресурсов соответствующего языка.
Файл Default.aspx.es.resx. Это файл ресурсов для испанского языка, без региональных параметров.
Файл Default.aspx.es-mx.resx. Это файл ресурсов для испанского языка (Мексика).
Файл Default.aspx.fr.resx. Это файл ресурсов для французского языка, без региональных параметров.
Базовое имя файла состоит из имени страницы этого файла, за которым следует имя языка и региональных параметров и расширение RESX. Список имен языков и региональных параметров см. в описании класса CultureInfo.
Локализация ресурсов клиентских сценариев
Поддержка локализации клиентских сценариев в технологии AJAX ASP.NET строится на основе модели локализации ASP.NET 2.0. В этой модели файлы сценариев и локализованные ресурсы сценариев включаются в звездообразную модель организации сборок (вспомогательных сборок). Затем можно выборочно использовать клиентские сценарии и ресурсы, включенные в эту модель, для конкретных языков и регионов. В этой модели имеется единственный базовый код для поддержки многих языков и региональных параметров. Кроме того, имеется также поддержка локализованных файлов сценариев, представленных на диске как JS-файлы. ASP.NET может автоматически обслуживать локализованные клиентские сценарии и ресурсы для определенных языков и регионов.
Дополнительные сведения см. в следующих разделах:
Общие сведения о локализации ресурсов для библиотек компонентов.
Пошаговое руководство. Внедрение локализованных ресурсов в файл JavaScript.
Пошаговое руководство. Глобализация даты с использованием клиентского сценария.
Выбор между глобальными и локальными файлами ресурсов
В веб-приложении можно использовать любую комбинацию глобальных и локальных файлов ресурсов. Если предполагается использование одних и тех же ресурсов несколькими страницами, то обычно эти ресурсы добавляются в глобальный файл ресурсов. Ресурсы в глобальных файлах ресурсов также являются строго типизированными на случай, если потребуется вызывать эти файлы программным образом.
Однако если в глобальных файлах ресурсов хранить все локализованные ресурсы, то эти файлы могут стать слишком большими. Кроме того, если несколько разработчиков работают с разными страницами, но в одном файле ресурсов, то управлять глобальными файлами ресурсов может оказаться весьма сложно.
Локальные файлы ресурсов упрощают управление ресурсами на одной странице ASP.NET. Но зато невозможно будет использовать эти ресурсы на разных страницах. Кроме того, если имеется много страниц, которые нужно локализовать для множества языков, можно создавать комплекты локальных файлов ресурсов. Если имеются большие веб-узлы с множеством папок и языков, локальные ресурсы могут быстро развернуть множество сборок в домене приложения.
При внесении изменений в глобальный или локальный файл ресурсов по умолчанию ASP.NET перекомпилирует эти ресурсы и заново запускает приложение ASP.NET. Это может повлиять на общую производительность веб-узла. Если же добавляются вспомогательные файлы ресурсов, то перекомпиляция ресурсов не выполняется, но приложение ASP.NET перезапускается.
Примечание. |
---|
Связанные ресурсы поддерживаются только в глобальных файлах ресурсов. |
Работа с ресурсами на страницах
После создания файлов ресурсов их можно использовать на страницах ASP.NET. Обычно ресурсы используются для заполнения значений свойств элементов управления на странице. Например, для установки свойства Text элемента управления Button можно использовать ресурсы вместо написания сложного кода, задающего для этого атрибута значение в виде конкретной строки.
Для установки значений атрибутов элементов управления с помощью ресурсов можно использовать как неявную, так и явную локализацию следующим образом:
Неявная локализация работает с локальными ресурсами и позволяет автоматически устанавливать свойства элементов управления в соответствующие ресурсы.
Явная локализация позволяет использовать выражение ресурса для установки свойства элемента управления в конкретный ресурс локального или глобального файла ресурсов.
Неявная локализация с помощью локальных ресурсов
Если для конкретной страницы создан локальный файл ресурсов, то можно использовать неявную локализацию для заполнения значений атрибутов элемента управления данными из этого файла ресурсов. При неявной локализации ASP.NET читает файл ресурсов и устанавливает соответствие ресурсов значениям атрибутов.
Чтобы можно было использовать неявную локализацию, необходимо соблюдать соглашение об именах для ресурсов в локальном файле ресурсов, использующее следующую модель:
Ключ.Свойство
Например, при создании ресурсов для элемента управления Button с именем Button1, необходимо создать в локальном файле ресурсов следующие пары «ключ/значение»:
Button1.Text
Button1.BackColor
Label1.Text
Для ключа можно использовать любое имя, но свойство должно соответствовать имени локализуемого свойства элемента управления.
Для указания неявной локализации на странице используется специальный атрибут meta в разметке элемента управления. Не требуется явно указывать локализуемые свойства. Элемент управления Button, настраиваемый для неявной локализации, может выглядеть следующим образом:
<asp:Button ID="Button1" runat="server" Text="DefaultText"
meta:resourcekey="Button1" />
Значение resourcekey сопоставляется с ключом в соответствующем файле ресурсов. Во время выполнения ASP.NET сопоставляет ресурсы со свойствами элемента управления с помощью метки resourcekey элемента управления. Если значение свойства задается в файле ресурсов, то ASP.NET подставляет это значение ресурса в свойство.
Явная локализация
Кроме неявной локализации, в местах использования выражения ресурса можно применять явную локализацию. В отличие от неявной локализации, при явной локализации необходимо использовать выражение ресурса для каждого свойства, которое требуется установить.
Элемент управления Button, настраиваемый для установки свойства Text из глобального файла ресурсов, может выглядеть следующим образом:
<asp:Button ID="Button1" runat="server"
Text="<%$ Resources:WebResources, Button1Caption %>" />
Выражение ресурса принимает следующую форму, в которой значение Класс указывать необязательно, если не используется глобальный ресурс, а значение ИД_ресурса необходимо:
<%$Resources:Класс,ИД_ресурса%>
Значение Класс идентифицирует файл ресурсов при использовании глобальных ресурсов. При компиляции RESX-файлов базовое имя файла без расширения явно используется в качестве имени класса итоговой сборки. Если требуется использовать ресурсы из локального файла ресурсов (соответствующего имени текущей страницы), то имя класса включать не нужно. ASP.NET самостоятельно сопоставляет класс страницы с классом ресурса.
Значение ИД_ресурса является идентификатором ресурса, который должен читаться. В предыдущем примере свойство Text кнопки читается из глобального файла ресурсов WebResources.resx (или его локализованной версии). В этом файле ASP.NET использует указанное значение для ресурса с идентификатором Button1Caption и для самой страницы. Для установки свойств страницы можно использовать выражения ресурсов в директиве @ Page.
Для элемента управления можно указывать либо явное выражение ресурса, либо неявное, но не оба сразу. Использование следующего синтаксиса объявления в элементе управления Button приводит к ошибке синтаксического анализатора:
<asp:Button ID="Button1"
runat="server"
meta:resourcekey="Button1Resource1"
Text="<%$ Resources:WebResources, Button1Caption %>" />
В данном примере указаны как неявный локальный файл ресурсов (соответствующий имени текущей страницы), так и явный файл ресурсов с именем WebResources. Чтобы устранить ошибку синтаксического анализатора, следует удалить одно из выражений ресурсов.
Локализация статического текста
Если на странице имеется статический текст, то можно воспользоваться локализацией ASP.NET, включив ее в элемент управления Localize, а затем с помощью явной локализации установить этот статический текст. Элемент управления Localize не предоставляет разметку, его функция состоит в том, чтобы быть местозаполнителем для локализуемого текста. Элемент управления Localize можно редактировать не только в сетке свойств, но и в представлении Конструктор. Во время выполнения ASP.NET воспринимает элемент управления Localize как элемент управления Literal. Например, страница может содержать следующий код:
<h1>
<asp:Localize runat=server
ID="WelcomeMessage"
Text="Welcome!" meta:resourcekey="LiteralResource1" />
</h1>
<br />
<br />
<asp:Localize runat="server"
ID="NameCaption"
Text="Name: " meta:resourcekey="LiteralResource2" />
<asp:TextBox runat="server" ID="TextBox1"
meta:resourcekey="TextBox1Resource1" />
Примечание о безопасности. |
---|
В данном примере имеется текстовое поле, куда вводятся пользовательские данные, которые представляют потенциальную угрозу безопасности. По умолчанию веб-страницы ASP.NET проверяют введенные пользователем данные на наличие сценариев и HTML-элементов. Дополнительные сведения см. в разделе Общие сведения об использовании сценариев. |
Неявная локализация в шаблонах
В элементах управления-шаблонах, например в DataList, GridView и Wizard, локализуются свойства стиля шаблона путем вызова этих свойств с помощью неявного выражения ресурса родительского элемента управления. Нельзя использовать неявное выражение ресурса непосредственно в шаблоне.
Чтобы локализовать значения для свойства шаблона, следует использовать атрибут meta и ключ ресурса для элемента управления, которому принадлежит данный шаблон. Затем следует воспользоваться синтаксисом Property.Subproperty или Property-Subproperty в файле ресурсов. Например, для элемента управления Wizard допустим следующий синтаксис:
<asp:Wizard ID="Wizard1"
runat="server"
meta:resourcekey="Wizard1Resource1">
<NavigationStyle
BorderWidth="<%$ resources:navBorderWidth %>"/>
<WizardSteps>
<asp:WizardStep ID="WizardStep1"
runat="server"
Title="Step 1"
meta:resourcekey="WizardStep1Resource1">
</asp:WizardStep>
</WizardSteps>
</asp:Wizard>
Для предыдущего примера можно использовать в локальном файле ресурсов следующую пару «ключ/значение»:
Wizard1Resource1.NavigationStyle.BackColor, Red
navborderWidth, 5
Или использовать следующую пару «ключ/значение»:
Wizard1Resource1.NavigationStyle-BackColor, Red
navborderWidth, 5
Для свойства NavigationStyle элемента управления Wizard из предыдущего примера можно использовать явное выражение ресурса. В этом явном выражении ресурса не указано значение Class, так что используются ресурсы из локального файла ресурсов.
Дополнительные сведения об элементах управления-шаблонах см. в разделе Шаблоны серверных веб-элементов управления ASP.NET.
Выбор файлов ресурсов для разных языков
При запуске страницы ASP.NET выбирает версию файла ресурсов, наиболее точно соответствующего текущей установке UICulture для этой страницы. Если такой файл ресурсов не находится, то ASP.NET получает ресурс из ресурса базового языка. Например, если выполняется страница Default.aspx, и текущее свойство UICulture имеет значение es (Испания), то ASP.NET использует скомпилированную версию локального файла ресурсов Default.aspx.es.resx.
ASP.NET может установить для свойств UICulture и Culture страницы значения языка и региональных параметров, переданные веб-обозревателем. Можно также установить значения свойств UICulture и Culture явно, либо объявив их, либо задав в коде. Также эти значения можно установить, объявив их в файлах Web.config. Дополнительные сведения см. в разделе Практическое руководство. Установка значений Culture и UICulture для глобализации веб-страниц ASP.NET.
Примечание. |
---|
При установке данных о языке и региональных параметрах не следует полагаться исключительно на установки веб-обозревателя, потому что пользователи могут использовать веб-обозреватель на чужом компьютере. Кроме того, в веб-обозревателях часто используется только информация о языке, без региональных параметров. В таком случае сервер должен выводить конкретные региональные параметры для форматирования данных. Рекомендуется дать пользователям возможность выбирать язык явно. |
Работа с ресурсами программным способом
Кроме установки значений ресурсов в разметке с выражениями ресурсов, можно извлекать значения ресурсов программным способом. Это приходится делать, если значение ресурса неизвестно во время разработки, или если требуется установить значение ресурса в значение, получаемое во время выполнения. Дополнительные сведения см. в разделе Практическое руководство. Извлечение значений ресурсов программными средствами.