Поделиться через


Практическое руководство. Локализация данных карты веб-узла

Обновлен: Ноябрь 2007

Ниже перечислены свойства карты веб-узла, которые можно локализовать.

Чтобы локализовать эти свойства, необходимо задать в качестве их значений явные или неявные выражения. Дополнительные сведения о выражениях см. в разделе Общие сведения о выражениях ASP.NET. Дополнительные сведения о файлах ресурсов см. в разделе Ресурсы в приложениях ASP.NET.

Локализация свойств «Заголовок» и «Описание» узла карты веб-узла с помощью явного выражения

  1. В карте веб-узла присвойте свойству EnableLocalization значение true. Например, в файле Web.sitemap, измените узел <siteMap> в соответствии с приведенным ниже кодом.

    <siteMap enableLocalization="true">
    
  2. В карте веб-узла измените значение свойства, которое необходимо локализовать, на строку ресурса, например на следующую строку кода (с учетом регистра):

    $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.

  3. Создайте собственные 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>
    
  4. Если необходимо локализовать строки на несколько языков, создайте дополнительные RESX-файлы и включите в их имена сведения о языковых стандартах. Например, файлу ресурсов для французского языка можно присвоить имя SiteMapLocalizations.fr.resx.

Локализация свойств «Заголовок» и «Описание» узла карты веб-узла с помощью неявного выражения

  1. В карте веб-узла присвойте свойству EnableLocalization значение true. Например, в файле Web.sitemap, измените узел <siteMap> в соответствии с приведенным ниже кодом.

    <siteMap enableLocalization="true">
    
  2. В карте веб-узла добавьте в узел, который необходимо локализовать, атрибут с именем 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.

  3. Создайте собственный RESX-файл в папке с именем App_GlobalResources в корневом каталоге приложения. В RESX-файле отдельные значения свойств индексируются по имени. В предыдущем примере файл Web.sitemap.resx может выглядеть указанным ниже образом.

    ms178427.alert_note(ru-ru,VS.90).gifПримечание.

    Имена ключей в глобальных файлах ресурсов не могут включать точки (.). Однако точки необходимо использовать в глобальных ресурсах, хранящихся в файлах карты веб-узла, ссылки на которые используются в неявных выражениях. Это связано с особенностями синтаксиса 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>
    
  4. Если необходимо локализовать строки на несколько языков, создайте дополнительные RESX-файлы и включите в их имена сведения о языковых стандартах. Например, файлу ресурсов для французского языка можно присвоить имя Web.sitemap.fr.resx.

Локализация в карте веб-узла свойства URL

Свойство Url нельзя локализовать в карте веб-узла так, как это можно сделать для свойств Title и Description.

Задание различных навигационных структур на основе языковых стандартов пользователя

  1. Создайте для каждого языкового стандарта отдельный файл карты веб-узла.

  2. Добавьте каждую карту веб-узла в файл Web.config. Дополнительные сведения см. в разделе Практическое руководство. Настройка нескольких карт веб-узлов и поставщики карт веб-узлов.

  3. Во время выполнения программно переключитесь на соответствующего поставщика Provider. Это делается путем присвоения имени поставщика свойству SiteMapProvider объекта SiteMapDataSource либо свойству SiteMapProvider объекта SiteMapPath. Дополнительные сведения см. в разделе Практическое руководство. Программное изменение узлов карты веб-узла в памяти.

Отказоустойчивость

Явные и неявные приложения нельзя использовать в одном и том же файле карты веб-узла.

См. также

Задачи

Практическое руководство. Настройка нескольких карт веб-узлов и поставщики карт веб-узлов

Практическое руководство. Программное изменение узлов карты веб-узла в памяти

Основные понятия

Карты узла ASP.NET

Ресурсы в приложениях ASP.NET

Общие сведения о выражениях ASP.NET

Безопасность системы навигации веб-узла ASP.NET

Безопасность доступа к данным

Ссылки

Title

Description

Attributes

Другие ресурсы

Безопасность приложений ASP.NET в средах выполнения