.NET TIPS

[ASP.NET]サイトマップ・ファイルをローカライズするには?[2.0のみ、C#、VB]

山田 祥寛
2006/10/06

 「TIPS:[ASP.NET]リソース・ファイル活用で国際化対応ページを構築するには?」では、リソース・ファイル(.resxファイル)と式構文(<%$〜%>)を使って、国際化対応ページを構築する方法について紹介した。本稿では引き続き、リソース・ファイルと式構文の組み合わせでサイトマップ・ファイル(Web.sitemap)をローカライズする方法について紹介する。

 サイトマップ・ファイルとは、サイト内のメニュー構成を定義するためのXML設定ファイルで、主にナビゲーション・コントロールと連携して利用できる。サイトマップ・ファイルに関する詳細については、「TIPS:[ASP.NET]Webフォーム上でサイト・メニュー/サイト・パスを作成するには?」を併せて参照していただくとよいだろう。

 それではさっそく、具体的なローカライズの手順を見ていくことにしよう。ここで紹介するサンプル・プログラムはとても単純なものだ。Internet Explorer(以後IE)などのブラウザの言語設定を日本語、英語と切り替えたときに、それぞれ下図のようにサイトマップであるTreeViewコントロール上の言語表示も動的に変更する。

英語カルチャのWebフォームの実行結果
多言語対応したTreeViewコントロールを英語カルチャで表示したところ。
 
日本語カルチャのWebフォームの実行結果
多言語対応したTreeViewコントロールを日本語カルチャで表示したところ。

1. グローバル・リソースを用意する

 グローバル・リソースとは、アプリケーション共通で利用可能なリソースのことだ。仮想ディレクトリ直下のApp_GlobalResourcesフォルダに配置する必要がある。

 ここでは、App_GlobalResourcesフォルダの配下に、以下のようなリソース・ファイル(「.resx」ファイル)を配置してみよう。なお、Visual Studio 2005(以降、VS 2005)でリソース・ファイルを作成する方法、ファイルの命名規則については、前掲のTIPSが詳しいので、併せてご参照いただきたい。

ファイル名 キー名
SiteMap.resx HomeTitle Home
HomeDesc This is top page
NewTitle What's New!
NewDesc About new books about server side tech
KisopTitle Basic PHP
KisopDesc Learning PHP5
DokushuTitle Teach Yourself AspDotNet
DokushuDesc Can teach yourself AspDotNet
SiteMap.ja.resx HomeTitle ホーム
HomeDesc トップページ
NewTitle 新刊書籍情報
NewDesc サーバサイド技術に関する書籍の最新情報
KisopTitle 改訂新版 基礎PHP
KisopDesc PHP 5.0を基礎から学ぶのに最適
DokushuTitle 独習ASP.NET
DokushuDesc ASP.NETを独りで学ぶ入門書の定番
App_GlobalResourcesフォルダに配置するリソース・ファイルの内容

2. リソース・ファイル対応のサイトマップ・ファイルを定義する

 リソース・ファイルの用意ができたところで、次に、App_GlobalResourcesフォルダに配置したリソース・ファイルの内容を取得するサイトマップ・ファイル(Web.sitemap)のコードを見てみよう。

<?xml version="1.0" encoding="UTF-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0"
  enableLocalization="true">
  <siteMapNode title="$Resources:SiteMap,HomeTitle"
    description="$Resources:SiteMap,HomeDesc" url="default.aspx">
    <siteMapNode title="$Resources:SiteMap,NewTitle"
      description="$Resources:SiteMap,NewDesc" url="books.aspx">
      <siteMapNode title="$Resources:SiteMap,KisopTitle"
        description="$Resources:SiteMap,KisopDesc" url="kisop.aspx" />
      <siteMapNode title="$Resources:SiteMap,DokushuTitle"
        description="$Resources:SiteMap,DokushuDesc" url="aspnet.aspx" />
    </siteMapNode>
  </siteMapNode>
</siteMap>
グローバル・リソース・ファイルを読み込むサイトマップ・ファイル(Web.sitemap)

 グローバル・リソース・ファイルを読み込む場合に注目していただきたいのは、以下の3点だ。

  • サイトマップのローカライズを有効にするには、<siteMap>要素のenableLocalization属性をtrueに設定
  • グローバル・リソース・ファイルを取得するには「$Resources:ベース名,キー名」の形式で指定
  • サイトマップ・ファイルでローカライズできるのは、Title/Description属性、および、そのほかのカスタム属性のみ(Url属性は不可。Url属性をローカライズする方法については、「TIPS:[ASP.NET]サイト内に複数のサイトマップ・ファイルを設置するには?」を参照)

 例えば、上のコードのような記述をすることで、サイトマップ・ファイルはSiteMap.xx.resx(xxは任意のカルチャ)から対応するキーの値を取得することができるというわけだ。

 以上を理解したら、Webフォーム(.aspxファイル)にTreeView/Menu/SiteMapPathなどのナビゲーション・コントロールを配置して、サイトマップ・ファイルが正しくローカライズされていることを確認してみよう(ナビゲーション・コントロールの利用方法については、前掲のTIPS「[ASP.NET]Webフォーム上でサイト・メニュー/サイト・パスを作成するには?」が詳しいので、そちらをご参照いただきたい。

 また、リソース・ファイルを利用する場合には、@PageディレクティブにCulture属性およびUICulture属性を指定しておく必要がある。Culture属性、UICulture属性は、それぞれアプリケーション、ユーザー・インターフェイスで採用されるカルチャを定義するものだ。値として“auto”を設定した場合には、ASP.NETがリクエスト情報に含まれるAccept-Languageヘッダの内容から判断して、自動的にカルチャを特定してくれる。これは、後述する暗黙的な関連付けを利用する場合も同様だ。

 ブラウザの言語設定によって、冒頭の2つの画面のような結果が得られれば成功だ。なお、IEの場合の言語設定は、メニューバーの[ツール]−[インターネット オプション]を選択して[インターネット オプション]ダイアログを表示し、そのダイアログの[全般]タブにある[言語]ボタンから変更できる。

●暗黙式を利用したローカライズの記法

 もっとも、サイトマップ・ファイル上の個々の属性に対していちいち式構文を記述するのは冗長で、コーディング・ミスの原因にもなると懸念される方もいるかもしれない。それはサイト規模が大きくなり、国際化すべき項目が多くなればなおさらだ。

 そこでASP.NET 2.0では、リソース・ファイルを「暗黙的に」対応するサイトマップ・ファイルの各項目に関連付けるための方法を用意している。暗黙的な関連付けを行うには、App_GlobalResourcesフォルダの配下に、以下のような内容のリソース・ファイル(.resxファイル)を配置する。

ファイル名 キー名
Web.sitemap.resx Home.Title Home
Home.Description This is top page
New.Title What's New!
New.Description About new books about server side tech
Kisop.Title Basic PHP
Kisop.Description Learning PHP5
Dokushu.Title Teach Yourself AspDotNet
Dokushu.Description Can teach yourself AspDotNet
Web.sitemap.ja.resx Home.Title ホーム
Home.Description トップページ
New.Title 新刊書籍情報
New.Description サーバサイド技術に関する書籍の最新情報
Kisop.Title 改訂新版 基礎PHP
Kisop.Description PHP 5.0を基礎から学ぶのに最適
Dokushu.Title 独習ASP.NET
Dokushu.Description ASP.NETを独りで学ぶ入門書の定番
App_GlobalResourcesフォルダに配置するリソース・ファイルの内容

 暗黙的な関連付けを行う場合にポイントとなるのは、以下の2点だ。

  • リソース・ファイル名は「Web.sitemap.xx.resx」(xxはカルチャ名)
  • キー名は「任意のキー名.属性名」の形式で指定する

 なお、通常、グローバル・リソース・ファイルのキー名にはピリオドを含めるべきではない。VS 2005のリソース・エディタでもキー名にピリオドを使用すると、次の画面のように、エラー表示を表すアイコンが表示されるはずだ。

キー名にピリオドを含む場合のエラー表示

 これは、現時点でVS 2005が暗黙キーの命名規則を認識しないための不具合であるが、実行時には正しく認識されるので、ここでは無視してしまって構わない。

 上記のリソースを取得するサイトマップ・ファイルのコードは以下のとおりだ。

<?xml version="1.0" encoding="UTF-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0"
  enableLocalization="true">
  <siteMapNode resourceKey="Home" url="default.aspx">
    <siteMapNode resourceKey="New" url="books.aspx">
      <siteMapNode resourceKey="kisop" url="kisop.aspx" />
      <siteMapNode resourceKey="dokushu" url="aspnet.aspx" />
    </siteMapNode>
  </siteMapNode>
</siteMap>
グローバル・リソース・ファイルを暗黙的に関連付けるサイトマップ・ファイル(Web.sitemap)

 暗黙的なリソースを関連付ける場合、<siteMapNode>要素にresourceKey属性を指定すればよい。これによって「キー名.属性名」で指定されたリソースの内容が対応するそれぞれのノードの属性値として適用されるというわけだ。

 以上を理解したら、先ほど同様、.aspxファイルにTreeView/Menu/SiteMapPathなどのナビゲーション・コントロールを配置して、サイトマップ・ファイルが正しくローカライズされていることを確認してみよう。本稿冒頭のような結果が得られれば成功だ。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Webフォーム 処理対象:サイトマップ
使用キーワード:@Pageディレクティブ
使用キーワード:<siteMap>要素
関連TIPS:[ASP.NET]リソース・ファイル活用で国際化対応ページを構築するには?
関連TIPS:[ASP.NET]Webフォーム上でサイト・メニュー/サイト・パスを作成するには?
関連TIPS:[ASP.NET]サイト内に複数のサイトマップ・ファイルを設置するには?

この記事と関連性の高い別の.NET TIPS
[ASP.NET]リソース・ファイル活用で国際化対応ページを構築するには?
[ASP.NET]サイト内に複数のサイトマップ・ファイルを設置するには?
[ASP.NET AJAX]ローカリゼーション対応を行うには?
[ASP.NET AJAX]ローカリゼーション対応を行うには?(アセンブリ組み込み編)
[ASP.NET]リソース・ファイル活用で国際化対応サイトを構築するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間