次の方法で共有


方法 : サイト マップ データをローカライズする

更新 : 2007 年 11 月

サイト マップ内の次のプロパティをローカライズできます。

これらのプロパティをローカライズするには、明示的な式または暗黙的な式をプロパティの値として使用します。式の詳細については、「ASP.NET 式の概要」を参照してください。リソース ファイルについては、「ASP.NET アプリケーション内のリソース」を参照してください。

明示的な式を使用してサイト マップ ノードの Title プロパティまたは Description プロパティをローカライズするには

  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"
    />
    

    ローカライズされたタイトルおよび説明は、HomePageTitle リソース キーと HomePageDescription リソース キーを使用して SiteMapLocalizations.resx という名前のファイルから取得されます。ローカライズされたカスタム属性は、CustomLocalizations.resx という名前の別個のファイルから取得されます。リソース文字列の詳細については、「ASP.NET 式の概要」を参照してください。

  3. アプリケーションのルートにある App_GlobalResources という名前のフォルダ内に .resx ファイルを作成します。.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 という名前になります。

暗黙的な式を使用してサイト マップ ノードの Title プロパティまたは Description プロパティをローカライズするには

  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" 
     />
    

    ローカライズされたタイトルおよび説明は、HomePage.title リソース キーと HomePage.description リソース キーを使用して Web.sitemap.resx という名前のファイルから取得されます。

  3. アプリケーションのルートにある App_GlobalResources という名前のフォルダ内に .resx ファイルを作成します。.resx ファイル内の個々のプロパティ値には、名前によるインデックスが付きます。前の例の場合、Web.sitemap.resx ファイルは次のようになります。

    ms178427.alert_note(ja-jp,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 に切り替えます。これを行うには、SiteMapDataSource オブジェクトの SiteMapProvider プロパティ、または SiteMapPath オブジェクトの SiteMapProvider プロパティをプロバイダ名に設定します。詳細については、「方法 : メモリ内のサイトマップ ノードをプログラムで変更する」を参照してください。

堅牢性の高いプログラム

同じサイト マップ ファイル内で、明示的な式と暗黙的な式の両方を使用することはできません。

参照

処理手順

方法 : 複数のサイト マップとサイトマップ プロバイダを設定する

方法 : メモリ内のサイトマップ ノードをプログラムで変更する

概念

ASP.NET サイト マップ

ASP.NET アプリケーション内のリソース

ASP.NET 式の概要

ASP.NET のサイト ナビゲーションの保護

データ アクセスのセキュリティ保護

参照

Title

Description

Attributes

その他の技術情報

ホストされた環境での ASP.NET アプリケーションのセキュリティ