方法 : サイト マップ データをローカライズする
更新 : 2007 年 11 月
サイト マップ内の次のプロパティをローカライズできます。
Attributes コレクションに含まれるカスタム プロパティ
これらのプロパティをローカライズするには、明示的な式または暗黙的な式をプロパティの値として使用します。式の詳細については、「ASP.NET 式の概要」を参照してください。リソース ファイルについては、「ASP.NET アプリケーション内のリソース」を参照してください。
明示的な式を使用してサイト マップ ノードの Title プロパティまたは Description プロパティをローカライズするには
サイト マップで、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" />
ローカライズされたタイトルおよび説明は、HomePageTitle リソース キーと HomePageDescription リソース キーを使用して SiteMapLocalizations.resx という名前のファイルから取得されます。ローカライズされたカスタム属性は、CustomLocalizations.resx という名前の別個のファイルから取得されます。リソース文字列の詳細については、「ASP.NET 式の概要」を参照してください。
アプリケーションのルートにある 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>
複数の言語の文字列をローカライズする必要がある場合は、ファイル名にロケール情報を含む、追加の .resx ファイルを作成できます。たとえば、フランス語バージョンのリソース ファイルは SiteMapLocalizations.fr.resx という名前になります。
暗黙的な式を使用してサイト マップ ノードの Title プロパティまたは Description プロパティをローカライズするには
サイト マップで、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" />
ローカライズされたタイトルおよび説明は、HomePage.title リソース キーと HomePage.description リソース キーを使用して Web.sitemap.resx という名前のファイルから取得されます。
アプリケーションのルートにある App_GlobalResources という名前のフォルダ内に .resx ファイルを作成します。.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 に切り替えます。これを行うには、SiteMapDataSource オブジェクトの SiteMapProvider プロパティ、または SiteMapPath オブジェクトの SiteMapProvider プロパティをプロバイダ名に設定します。詳細については、「方法 : メモリ内のサイトマップ ノードをプログラムで変更する」を参照してください。
堅牢性の高いプログラム
同じサイト マップ ファイル内で、明示的な式と暗黙的な式の両方を使用することはできません。
参照
処理手順
方法 : 複数のサイト マップとサイトマップ プロバイダを設定する
方法 : メモリ内のサイトマップ ノードをプログラムで変更する