チュートリアル : ASP.NET でのローカリゼーションのためのリソースの使用
更新 : 2007 年 11 月
ローカライズされた Web ページを作成するには、ユーザーの言語とカルチャに基づいて、ページのテキストやコントロールのリソースを使用すると効率的です。ASP.NET では、リソース オブジェクトに置かれたプロパティを使用すると、実行時にユーザーの言語とカルチャに基づいて、正しいプロパティが選択されます。この処理は次のとおり、単純です。
リソース ファイル (.resx) に値が格納されています。
ページで、コントロールがプロパティ値としてリソースを使用するように指定します。
実行時に、コントロールのプロパティ値がリソース ファイルから取得されます。
メモ : 実際には、値はデータベースなどのカスタム リソース オブジェクトに格納できます。ただし、このチュートリアルでは、.resx ファイルに値を保存します。
Visual Web Developer では、コントロールのリソース、コントロールのプロパティ、およびコントロールの HTML を、コードを書かずに生成できます。
このチュートリアルでは、以下のタスクを行います。
ASP.NET ページのローカリゼーションの有効化
リソース ファイルを生成し、使用するアプリケーションのコントロールにその値を暗黙に関連付けます。
ローカリゼーション リソース ファイルを作成し、宣言式を使用して、これらのファイルを明示的にページで参照します。
前提条件
このチュートリアルを実行するための要件は次のとおりです。
Visual Web Developer (Visual Studio)
.NET Framework
Web サイトの作成
既に Visual Web Developer で Web サイトを作成している場合 (チュートリアル : Visual Web Developer での基本的な Web ページの作成 を参照) は、その Web サイトを使用して、次のセクション「ASP.NET での暗黙のローカリゼーション」に進むことができます。作成していない場合は、次に説明する手順に従って新しい Web サイトとページを作成します。
ファイル システム Web サイトを作成するには
Visual Web Developer を開きます。
[ファイル] メニューの [新しい Web サイト] をクリックします。
[新しい Web サイト] ダイアログ ボックスが表示されます。
[Visual Studio にインストールされたテンプレート] の [ASP.NET Web サイト] をクリックします。
[場所] ボックスに、Web サイトのページを格納するフォルダの名前を入力します。
たとえば、フォルダ名として「C:\WebSites」と入力します。
[言語] ボックスで、作業に使用する言語をクリックします。
[OK] をクリックします。
Visual Web Developer によりフォルダが作成され、Default.aspx という名前の新しいページが作成されます。
ASP.NET での暗黙のローカリゼーション
このセクションでは、暗黙のローカリゼーションを実行します。暗黙のローカリゼーションでは、コントロールのプロパティがリソース ファイルから自動的に読み込まれるように指定します。しかし、どのプロパティをローカライズするかを明示的に指定する必要はありません。次に、個々のプロパティのローカライズされた値をリソース ファイルとして作成します。実行時に、ASP.NET がページのコントロールをチェックします。コントロールに暗黙のローカリゼーションが指定されている場合は、ASP.NET がそのページ用にリソース ファイル内を検索します。指定されたコントロールのプロパティの設定値が見つかると、コントロール内の値がリソース ファイル内の値に置き換えられます。
この暗黙のローカリゼーションの例では、デザイナとリソース エディタの両方を使用して既定のリソース ファイルを生成し、これを 2 言語のローカリゼーションの開始点として使用します。Visual Web Developer では、ページ上のコントロールのみに基づいて、リソース ファイルが作成されます。したがって、ボタン、ラベル、テキスト ボックスなどの単純なコントロールを含め、ページのコントロール レイアウトを終了してからリソース ファイルを生成することをお勧めします。
コントロールをページに配置するには
ソリューション エクスプローラで、Default.aspx を右クリックし、[名前の変更] をクリックし、「Sample.aspx」と入力します。
暗黙のリソース ファイル名にはページ名が使用されるので、こうしておくと、このチュートリアルの残りの部分で既定のリソース ファイルに関する混乱を避けられます。
「Sample.aspx」を開き、デザイン ビューに切り替えます。
ツールボックスの [標準] セクションから Button、Label、および TextBox コントロールをページにドラッグします。
各コントロールについて、[テキスト] を「English Button」、「English Label」、および「English TextBox」に設定します。
ページを作成し、コントロールを追加したら、Visual Web Developer のコマンドを使用して、このページのローカルのリソース ファイルを生成します。ローカルのリソース ファイルには、このページのコントロールのリソース文字列が格納されます。Visual Web Developer では、個々のプロパティにリソース文字列が生成され、コントロール内部で、ローカライズ可能と指定されます。各コントロールでは、ほとんどのテキスト ベースのプロパティがローカライズ可能と指定されていますが、他のプロパティもローカライズ可能と指定できます。
リソース ファイルを自動的に生成するには
デザイナ画面またはコントロールをクリックします。
[ツール] メニューの [ローカル リソースの生成] をクリックします。
App_LocalResources という新しいフォルダが生成され、App_LocalResources フォルダ内に Sample.aspx.resx という名前の新しいファイルが生成されます。ページに Sample.aspx 以外の名前を付けている場合は、.resx ファイル名にその名前が反映されます。暗黙のローカリゼーションでは、リソース ファイルには、個々のページ名に基づいた名前が付けられます。
ソース ビューに切り替えて、コントロール宣言に対して行った変更を確認します。
コントロールには、新しく作成されたリソース ファイルから値を取得するための属性が、自動的に追加されます。たとえば、Button コントロールのマークアップには meta:resourcekey という新しい属性があります。
<asp:Button ID="Button1" Runat="server" meta:resourcekey="ButtonResource1" Text="English Button" />
ブラウザが Web サーバーに要求を送信するとき、その要求には現在の言語とカルチャに関する情報が含まれています。たとえば、米国英語を使用するように設定されているブラウザは、それを示す "en-us" という文字列を送信し、英国英語を使用するように設定されているブラウザは、"en-gb" という文字列を送信します。
メモ : |
---|
ブラウザの要求への言語とカルチャの設定は、必ずしもユーザーが希望する言語を示しているとは限りません。設定値は、ブラウザに送信するように設定されたか、使用しているオペレーティング システムから継承した値を示しているのみです。このチュートリアルでは、言語とカルチャの設定値を信頼しますが、実際のアプリケーションでは、ユーザーが手動で言語とカルチャを選択できる方法も含める必要があります。 |
リソース ファイルは、すべての要求に対して、既定のリソース ファイルとして使用されます (これは、フォールバック カルチャ用のリソース ファイルです)。ブラウザによってカルチャが指定されない場合、またはブラウザの要求にユーザーがサポートできない言語とカルチャが含まれる場合に、この既定のファイルからリソース値が取得されます。
リソース ファイルが作成されたので、リソース エディタを使用してリソース ファイル内にローカライズされたテキストを配置できます。
リソース エディタを使用してリソース ファイルを編集するには
ソリューション エクスプローラで、Sample.aspx.resx を開きます。
リソース エディタの [値] の下に、ユーザーがページに配置した各コントロールの Text プロパティが表示されます。ここで値を変更すると、既定のカルチャの値も変更されます。
ButtonResource1.Text を「Edited English Text」に設定します。
ファイルを保存します。
ここでページをテストできます。
ページをテストするには
Ctrl キーを押しながら F5 キーを押してページを実行します。
リソース エディタで入力したテキストが Button1 のラベルとして表示されます。暗黙のローカリゼーションでは、リソース ファイル内の構文のプロパティが、ページ自体に指定されているプロパティをオーバーライドします。
別のカルチャの追加
言語とカルチャの組み合わせごとに、一意のリソース ファイルが必要となります。別のカルチャを追加するには、既定のファイルを基に作業を開始できます。別のカルチャとロケールのリソース ファイルを作成するには、新しいリソース ファイルを作成し、そのファイル名に ISO 言語コードを含めます (たとえば、en-us、fr-ca、en-gb など)。これらの ISO コードは、Sample.aspx.en-us.resx のように、ページ名と .resx 拡張子の間に記述します。いずれのカルチャに対しても中立的な言語を指定する場合は、たとえばフランス語の場合であれば Sample.aspx.fr.resx のように、ファイル名から国別コードを削除します。
メモ : |
---|
暗黙のローカリゼーションの構文では、各ページごとに別の一連のリソース ファイルを作成する必要があります。 |
カルチャが中立的なフランス語ファイルを作成するには
ソリューション エクスプローラで Sample.aspx.resx ファイルをクリックし、次に [コピー] をクリックします。
App_LocalResourcesフォルダを右クリックし、次に [貼り付け] をクリックします。
[コピー ~ Sample.aspx.resx] というファイルが生成されます。
[コピー ~ Sample.aspx.resx] ファイルを右クリックし、[名前の変更] をクリックし、「Sample.aspx.fr.resx」と入力します。
Sample.aspx.fr.resx は、ファイルがカルチャ的に中立的なフランス語テキストであることを示します。
Sample.aspx.fr.resx を開きます。
Button、Label、および TextBox の各コントロールについて、[テキスト] を「French Button」、「French Label」、および「French TextBox」に設定します。
ファイルを保存します。
代替言語設定のテスト
新しいリソース ファイルが ASP.NET で使用されるかどうかを確認する前に、目的のカルチャを要求するようにブラウザの設定を変更する必要があります。
ブラウザの言語設定を変更するには
Microsoft Internet Explorer で、[ツール] メニューの [インターネット オプション] をクリックします。
[言語] をクリックします。
[言語の優先順位] ダイアログ ボックスで、[追加] をクリックします。
[言語の追加] ダイアログ ボックスで、[言語] の [フランス語 (フランス) [fr]] をクリックし、[OK] をクリックします。
[追加] をクリックし、言語の一覧に [スペイン語 (メキシコ) [es-mx]] を追加します。
[追加] をクリックし、言語の一覧に [アラビア語 (エジプト) [ar-eg]] を追加します。
このチュートリアルでは、後でテスト用にスペイン語とアラビア語を使用します。
[言語の優先順位] ダイアログ ボックスで、[言語] の下の [フランス語 (フランス) [fr]] をクリックし、[上へ] をクリックして [OK] をクリックします。
Internet Explorer が、すべての要求に対して、言語設定 fr を渡すように設定されました。Sample.aspx ページでカルチャが auto に設定されていると、ユーザーによる言語とカルチャの設定に従ってリソース ファイルとそれに対応する値が検索され、ページがアセンブルされます。
ページをテストするには
Visual Web Developer で、Ctrl キーを押しながら F5 キーを押してページを実行します。
英語バージョンに代わって、ローカライズされたフランス語ファイルからの値を使用して、ページが再表示されます。
メモ : 言語設定をリセットするには、Internet Explorer で [言語の優先順位] ダイアログ ボックスを開き、選択した言語を一覧内の元の位置に戻します。
ASP.NET での明示的なローカリゼーション
このチュートリアルの最初の部分では、コントロールにローカライズされたテキストを表示するために ASP.NET の暗黙のローカリゼーションを使用しました。プロパティの値が入ったリソース ファイルを生成し、このプロセスにより個々のコントロールに属性が追加されて、プロパティの値がある場合はリソース ファイルから取得するように指定されました。暗黙のローカリゼーションは、自動的に進行します。リソース ファイルから情報を読み取る方法を、プロパティごとに指定する必要はありませんでした。
ただし、より直接的にプロパティを設定する場合があります。その場合は、暗黙のローカリゼーションを使用する代わりに、明示的なローカリゼーションを使用できます。明示的なローカリゼーションでは、リソース ファイルを指す式を使用してプロパティに値を設定します。ページを実行すると、この式が評価され、指定したリソース ファイルから値が読み取られ、その値を使用してプロパティが設定されます。
明示的なローカリゼーションは、コントロールとラベルの他に、大量のテキストやカスタム メッセージをローカライズする必要があるときに便利です。たとえば、電子商取引のサイトで使用するために、一連の、ローカライズされたようこそメッセージとありがとうメッセージを作成し、このテキストをページに配置するために明示的宣言式を使用できます。さらに、明示的なローカリゼーションでは、各ページ用に個別のファイル セットを保持する代わりに、ローカライズされたリソース ファイルを 1 セット用意するだけで済みます。
このセクションでは、手動でリソース ファイルを作成し、それを ASP.NET の宣言式の構文を使用して参照します。簡単なありがとうメッセージ用のリソース ファイルを作成します。デザイナを使用するときと異なり、各 ASP.NET ページに個別のリソース ファイルは必要ありません。
リソース ファイルの基本名は LocalizedText です。ローカライズする各言語について、適切な言語コード (それに、オプションでカルチャ コード) がファイル名に含まれたファイルを別に作成します。たとえば、米国英語用には LocalizedText.resx というファイルを作成します。カナダのフランス語用には、LocalizedText.fr-ca.resx というファイルを作成します。どちらのファイルも、Web アプリケーションの Resources ディレクトリに置かれます。前の暗黙の場合の例とは異なり、各 .aspx ページにリソース ファイルを保持する必要はありません。その代わりに、サポートする各言語またはカルチャ用に 1 セットのファイルを用意します。
リソース ファイルを作成するには
ソリューション エクスプローラで、Web サイトのルートを右クリックし、[ASP.NET フォルダの追加] をクリックし、次に [App_GlobalResources] をクリックします。
App_GlobalResources フォルダを右クリックし、[新しい項目の追加] をクリックします。
[Visual Studio にインストールされたテンプレート] の [アセンブリ リソース ファイル] をクリックします。
[名前] ボックスに「LocalizedText.resx」と入力し、[追加] をクリックします。
LocalizedText.resx ファイルが、フォールバック カルチャのリソース ファイルとして使用されます。
2 番目の .resx ファイルを作成し、「LocalizedText.fr.resx」と名前を付けます。
文字列 "fr" により、ブラウザの言語が (カルチャに関係なく) フランス語に設定されている場合は、このファイルがリソースであることを示します。
3 番目の .resx ファイルを作成し、「LocalizedText.es-mx.resx」と名前を付けます。
文字列 "es-mx" により、ブラウザの言語が (メキシコの) スペイン語に設定されている場合は、このファイルがリソースであることを示します。
LocalizedText.resx ファイルを開きます。
[名前] 列の最初の行に「Msg1」と入力します。
[値] 列の最初の行に、「Hello」と入力します。
ファイルを保存して閉じます。
LocalizedText.fr.resx を開き、「Msg1」という名前のリソース文字列を作成し、値「Bon jour」を代入します。操作を終了したら、このファイルを保存して閉じます。
LocalizedText.es-mx.resx を開き、「Msg1」という名前のリソース文字列を作成し、値「Buenos días」を代入します。操作を終了したら、このファイルを保存して閉じます。
メモ : 鋭アクセント (í) が付いた文字を挿入するには、Numlock キーをオンにして、テンキーから Alt + 0237 と入力します。
Msg1 という名前のリソース用に 3 つの値を作成しました。ASP.NET が、ブラウザに設定されている言語に対応する適切なリソース ファイルから値を読み取ります。
これで使用するリソース ファイルが作成されたので、ページに戻り、リソースを参照するコントロールを追加します。
ページにラベル コントロールを追加するには
Sample.aspx に切り替え、デザイン ビューに切り替えます。
別の Label コントロールをページにドラッグします。
Label コントロールを右クリックし、[プロパティ] をクリックし、次に [式] ボックスで省略記号 [(...)] ボタンをクリックします。
[式] ダイアログ ボックスが表示されます。
[バインド可能プロパティ] ボックスの [テキスト] をクリックします。
[式の型] ボックスの [リソース] をクリックします。
[式のプロパティ] の下の [ClassKey] を「LocalizedText」に、[ResourceKey] を「Msg1」に設定します。
[OK] をクリックします。
ソース ビューに切り替えます。
ラベルのテキスト属性に、リソースの取得元となる基本ファイルおよび選択するキーを示す明示的な式が追加されます。
<asp:Label ID="Label2" Runat="server" Text="<%$ Resources:LocalizedText, Msg1 %>">
メモ : LocalizedText 属性は、実際のファイル名ではないので、言語インジケータ、カルチャ インジケータ、および拡張子 .resx は付いていません。その代わりに、LocalizedText が基本リソース クラスを示します。ブラウザから受け取ったカルチャに応じて、ASP.NET がファイル名に適切な言語コードやカルチャ コードを持つ、LocalizedText.fr.resx や LocalizedText.es-mx.resx などのファイルからリソースを選択します。対応する言語が見つからない場合は LocalizedText.resx のリソースを選択します。
リソース ファイルが完成して宣言式を追加すると、ページをテストできます。前回のテストで、ブラウザは、言語設定としてフランス語を通知するように設定されました。このテストでは、ブラウザの言語設定を何度か変更します。
ページをテストするには
Ctrl キーを押しながら F5 キーを押してページを実行します。
リソース エディタに渡したフランス語バージョンのテキストが、Label コントロールのテキストとして表示されます。
Microsoft Internet Explorer で、[ツール] メニューの [インターネット オプション] をクリックします。
[言語] をクリックします。
[言語の優先順位] ダイアログ ボックスで、[スペイン語 (メキシコ) [es-mx]] を言語の一覧の先頭に移動させます。操作を終了したら、[OK] をクリックし、[インターネット オプション] ダイアログ ボックスを閉じます。
F5 キーを押して、ブラウザを更新します。
スペイン語バージョンのテキストが表示されます。
言語をアラビア語に変更してから、F5 キーを押してページを再度更新します。
今度は、フォールバック リソース ファイルで使用した言語でテキストが表示されます。LocalizedText.ar-eg.resx というファイルを作成していないので、ASP.NET はブラウザから通知された言語とカルチャに対応するテキストを見つけることができず、フォールバック リソース ファイルが使用されます。
ページのテストを終了したら、言語の設定を自分の選んだ言語に戻します。
次の手順
ローカリゼーションは、複雑な作業となることがあります。このチュートリアルでは、作業を削減できる Visual Web Developer の機能の一部を紹介しました。ローカリゼーションと ASP.NET について詳しく調べる場合は、次の各項目を参照してください。
アプリケーションでのリソースの使用について調べる場合。詳細については、「アプリケーションのリソース」を参照してください。
言語、国または地域、使用する暦、日付形式、通貨形式、数値形式、文字列並べ替え順序などのカルチャ関連情報を定義したクラスの使用について調べる場合。詳細については、「System.Globalization」を参照してください。
グローバルな読者に対するコーディングを行うときに使用するベスト プラクティスを調べる場合。詳細については、「推奨される国際対応アプリケーション開発手順」を参照してください。