.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)のコードを見てみよう。
|
|
グローバル・リソース・ファイルを読み込むサイトマップ・ファイル(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が暗黙キーの命名規則を認識しないための不具合であるが、実行時には正しく認識されるので、ここでは無視してしまって構わない。
上記のリソースを取得するサイトマップ・ファイルのコードは以下のとおりだ。
|
|
グローバル・リソース・ファイルを暗黙的に関連付けるサイトマップ・ファイル(Web.sitemap) |
暗黙的なリソースを関連付ける場合、<siteMapNode>要素にresourceKey属性を指定すればよい。これによって「キー名.属性名」で指定されたリソースの内容が対応するそれぞれのノードの属性値として適用されるというわけだ。
以上を理解したら、先ほど同様、.aspxファイルにTreeView/Menu/SiteMapPathなどのナビゲーション・コントロールを配置して、サイトマップ・ファイルが正しくローカライズされていることを確認してみよう。本稿冒頭のような結果が得られれば成功だ。
利用可能バージョン:.NET Framework 2.0のみ カテゴリ:Webフォーム 処理対象:サイトマップ 使用キーワード:@Pageディレクティブ 使用キーワード:<siteMap>要素 関連TIPS:[ASP.NET]リソース・ファイル活用で国際化対応ページを構築するには? 関連TIPS:[ASP.NET]Webフォーム上でサイト・メニュー/サイト・パスを作成するには? 関連TIPS:[ASP.NET]サイト内に複数のサイトマップ・ファイルを設置するには? |
「.NET TIPS」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|