Практическое руководство. Локализация данных карты веб-узла
Обновлен: Ноябрь 2007
Ниже перечислены свойства карты веб-узла, которые можно локализовать.
Настраиваемые свойства, хранящиеся в коллекции Attributes
Чтобы локализовать эти свойства, необходимо задать в качестве их значений явные или неявные выражения. Дополнительные сведения о выражениях см. в разделе Общие сведения о выражениях ASP.NET. Дополнительные сведения о файлах ресурсов см. в разделе Ресурсы в приложениях ASP.NET.
Локализация свойств «Заголовок» и «Описание» узла карты веб-узла с помощью явного выражения
В карте веб-узла присвойте свойству EnableLocalization значение true. Например, в файле Web.sitemap, измените узел <siteMap> в соответствии с приведенным ниже кодом.
<siteMap enableLocalization="true">
В карте веб-узла измените значение свойства, которое необходимо локализовать, на строку ресурса, например на следующую строку кода (с учетом регистра):
$resources:ClassName,KeyName,DefaultValue
Например, в файле Web.sitemap узел карты веб-узла может выглядеть, как в приведенном ниже примере кода.
<siteMapNode url="~/Home.aspx" title="$resources:SiteMapLocalizations,HomePageTitle" description="$resources:SiteMapLocalizations,HomePageDescription,Default description" myCustomAttribute="$resources: CustomLocalizations,MyCustomAttribute" />
Локализованные заголовок и описания загружаются из файла с именем SiteMapLocalizations.resx по ключам ресурса HomePageTitle и HomePageDescription. Локализованный настраиваемый атрибут загружается из отдельного файла с именем CustomLocalizations.resx. Дополнительные сведения о строках ресурсов см. в разделе Общие сведения о выражениях ASP.NET.
Создайте собственные RESX-файлы в папке с именем App_GlobalResources в корневом каталоге приложения. В RESX-файле отдельные значения свойств индексируются по имени ключа. В предыдущем примере файл SiteMapLocalizations.resx может выглядеть указанным ниже образом.
<?xml version="1.0" encoding="utf-8"?> <root> <xsd:schema id="root" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:element name="root" msdata:IsDataSet="true"> <xsd:complexType> <xsd:choice maxOccurs="unbounded"> <xsd:element name="metadata"> <xsd:complexType> <xsd:sequence> <xsd:element name="value" type="xsd:string" minOccurs="0" /> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="type" type="xsd:string" /> <xsd:attribute name="mimetype" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="assembly"> <xsd:complexType> <xsd:attribute name="alias" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="data"> <xsd:complexType> <xsd:sequence> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> </xsd:complexType> </xsd:element> <xsd:element name="resheader"> <xsd:complexType> <xsd:sequence> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> </xsd:choice> </xsd:complexType> </xsd:element> </xsd:schema> <resheader name="resmimetype"> <value>text/microsoft-resx</value> </resheader> <resheader name="version"> <value>2.0</value> </resheader> <resheader name="reader"> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> <resheader name="writer"> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> <data name="HomePageTitle"> <value xml:space="preserve">Home Page</value> </data> <data name="HomePageDescription"> <value xml:space="preserve">Home page of site</value> </data> </root>
Если необходимо локализовать строки на несколько языков, создайте дополнительные RESX-файлы и включите в их имена сведения о языковых стандартах. Например, файлу ресурсов для французского языка можно присвоить имя SiteMapLocalizations.fr.resx.
Локализация свойств «Заголовок» и «Описание» узла карты веб-узла с помощью неявного выражения
В карте веб-узла присвойте свойству EnableLocalization значение true. Например, в файле Web.sitemap, измените узел <siteMap> в соответствии с приведенным ниже кодом.
<siteMap enableLocalization="true">
В карте веб-узла добавьте в узел, который необходимо локализовать, атрибут с именем resourceKey, используя следующую строку кода (с учетом регистра):
resourceKey="HomePage"
Например, в файле Web.sitemap узел <siteMap> может выглядеть следующим образом:
<siteMapNode url="~/Home.aspx" resourceKey="HomePage" title = "Default Title" description = "Default Description" />
Локализованные заголовок и описания загружаются из файла с именем Web.sitemap.resx по ключам ресурса HomePage.title и HomePage.description.
Создайте собственный RESX-файл в папке с именем App_GlobalResources в корневом каталоге приложения. В RESX-файле отдельные значения свойств индексируются по имени. В предыдущем примере файл Web.sitemap.resx может выглядеть указанным ниже образом.
Примечание. Имена ключей в глобальных файлах ресурсов не могут включать точки (.). Однако точки необходимо использовать в глобальных ресурсах, хранящихся в файлах карты веб-узла, ссылки на которые используются в неявных выражениях. Это связано с особенностями синтаксиса resourceKey. В некоторых средах редактирования, например в Visual Web Developer, при использовании точки в имени ключа может возникнуть ошибка времени разработки. Однако эта ошибка не влияет на возможность изменения и сохранения файла, поэтому ее можно пропустить.
<?xml version="1.0" encoding="utf-8"?> <root> <xsd:schema id="root" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xsd:element name="root" msdata:IsDataSet="true"> <xsd:complexType> <xsd:choice maxOccurs="unbounded"> <xsd:element name="metadata"> <xsd:complexType> <xsd:sequence> <xsd:element name="value" type="xsd:string" minOccurs="0" /> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" /> <xsd:attribute name="type" type="xsd:string" /> <xsd:attribute name="mimetype" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="assembly"> <xsd:complexType> <xsd:attribute name="alias" type="xsd:string" /> <xsd:attribute name="name" type="xsd:string" /> </xsd:complexType> </xsd:element> <xsd:element name="data"> <xsd:complexType> <xsd:sequence> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> </xsd:complexType> </xsd:element> <xsd:element name="resheader"> <xsd:complexType> <xsd:sequence> <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> </xsd:sequence> <xsd:attribute name="name" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> </xsd:choice> </xsd:complexType> </xsd:element> </xsd:schema> <resheader name="resmimetype"> <value>text/microsoft-resx</value> </resheader> <resheader name="version"> <value>2.0</value> </resheader> <resheader name="reader"> <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> <resheader name="writer"> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> <data name="HomePage.description"> <value xml:space="preserve">Home Page Description</value> </data> <data name="HomePage.Text"> <value xml:space="preserve">Home Page Text from Resource File</value> </data> <data name="HomePage.title"> <value xml:space="preserve">Home Page Title from Resource File</value> </data> <assembly alias="mscorlib" name="mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <data name="LabelResource1.Visible" type="System.Boolean, mscorlib"> <value>True</value> </data> </root>
Если необходимо локализовать строки на несколько языков, создайте дополнительные RESX-файлы и включите в их имена сведения о языковых стандартах. Например, файлу ресурсов для французского языка можно присвоить имя Web.sitemap.fr.resx.
Локализация в карте веб-узла свойства URL
Свойство Url нельзя локализовать в карте веб-узла так, как это можно сделать для свойств Title и Description.
Задание различных навигационных структур на основе языковых стандартов пользователя
Создайте для каждого языкового стандарта отдельный файл карты веб-узла.
Добавьте каждую карту веб-узла в файл Web.config. Дополнительные сведения см. в разделе Практическое руководство. Настройка нескольких карт веб-узлов и поставщики карт веб-узлов.
Во время выполнения программно переключитесь на соответствующего поставщика Provider. Это делается путем присвоения имени поставщика свойству SiteMapProvider объекта SiteMapDataSource либо свойству SiteMapProvider объекта SiteMapPath. Дополнительные сведения см. в разделе Практическое руководство. Программное изменение узлов карты веб-узла в памяти.
Отказоустойчивость
Явные и неявные приложения нельзя использовать в одном и том же файле карты веб-узла.
См. также
Задачи
Практическое руководство. Настройка нескольких карт веб-узлов и поставщики карт веб-узлов
Практическое руководство. Программное изменение узлов карты веб-узла в памяти
Основные понятия
Общие сведения о выражениях ASP.NET
Безопасность системы навигации веб-узла ASP.NET