.NET TIPS [ASP.NET AJAX]ローカリゼーション対応を行うには?(アセンブリ組み込み編)[2.0、3.0、3.5、C#、VB]山田 祥寛2008/05/22 |
|
「TIPS:[ASP.NET AJAX]ローカリゼーション対応を行うには?」では、ファイル・システム上に配置したJavaScriptコードをローカライズする方法について紹介した。もちろん、これはこれで有効なアプローチであるが、カスタムのコントロールを開発するようなケースではJavaScriptのコードはアセンブリに組み込むのが一般的だ。そして、そのようなケースでは前掲のTIPSで紹介したアプローチは利用できない。
そこで本稿では、アセンブリに組み込まれたJavaScriptのコードにリソースを適用し、ローカライズする方法について紹介する。
なお、ここで紹介するサンプルでは、別記事「MS AJAX LibでAJAX対応コントロールを開発しよう(前編)」で紹介したDialogButtonコントロール(DialogButtonExtender)を修正し、リソースから取得したメッセージをダイアログ表示するものとする。JavaScript組み込みコントロールそのものの作成手順については本稿では割愛するので、元の記事の方を参照いただきたい。
言語設定が「日本語」のクライアントで[表示]ボタンをクリック |
言語設定が「英語」のクライアントで[表示]ボタンをクリック |
[表示]ボタンをクリックすると、リソースから取得したメッセージをダイアログ表示(クライアントの言語設定によって表示言語を切り替え) |
それではさっそく、具体的な手順を見ていくことにしよう。なお、本サンプルを動作させるに当たっては、「TIPS:[ASP.NET AJAX]ASP.NET AJAX Control Toolkitを利用するには?」で紹介した手順に従って、Control Toolkitを利用可能な状態にしておく必要がある。
[注意]グローバリゼーション機能を有効化 |
本サンプルを動作させるには、アプリケーション構成ファイル(Web.config)に対して、カルチャに関する設定を行っておく必要がある。具体的な記述と設定の意味については、「TIPS:[ASP.NET AJAX]グローバリゼーション対応を行うには?」の手順1を参照していただきたい。 |
1. リソース・ファイルを追加する
アセンブリにリソースを組み込む場合には、(JavaScriptコードではなく)通常の.resxファイルとしてリソースを定義すればよい。ここでは、別記事で作成したMyAjaxLibプロジェクト(ASP.NET AJAX Control Project)の直下にリソース・ファイルとして「Greeting.resx」「Greeting.ja-JP.resx」「Greeting.de.resx」を追加する。
リソース・ファイルの追加/編集方法については、「TIPS:[ASP.NET]リソース・ファイル活用で国際化対応ページを構築するには?」をご参照いただくとして、ここでは以下の表の要領でそれぞれのリソース・ファイルにそれぞれのリソースを定義しておこう。
ファイル名 | キー名 | 値 |
Greeting.resx | morning | Good Morning |
hello | Hello | |
night | Good Night | |
Greeting.ja-JP.resx | morning | おはようございます |
hello | こんにちは | |
night | おやすみなさい | |
Greeting.de.resx | morning | Guten Morgen |
hello | Guten Tag | |
night | Gute Nacht | |
リソース・ファイルへの定義内容 |
2. JavaScriptコードとリソースとを関連付ける
JavaScriptコードと参照するリソース・ファイルを関連付けるには、ExtenderクラスにScriptResource属性を宣言すればよい。この例であれば、具体的にはDialogButtonExtenderクラスに対して、以下の属性のコード(太字部分)を追加する。
|
||
リソース・ファイルの関連付けを行うコード(上:DialogButtonExtender.cs、下:DialogButtonExtender.vb) |
ScriptResource属性(System.Web.UI名前空間)は、JavaScriptから参照するリソース・ファイルを関連付けるための属性である。ScriptResource属性の一般的な構文は、以下のとおり。
|
||
ScriptResource属性の構文(上:C#、下:VB) |
スクリプト/リソースのパスには、それぞれ関連付けるスクリプト・ファイル、リソース・ファイルのパスを「プロジェクト名.フォルダ名.ファイル名」の形式で指定すればよい。また、リソースの型名はJavaScript側からリソース個々のキーにアクセスするためのプレフィックスとなる。例えば、ここでは“MyRes”と指定しているので、リソース・ファイル内のmorningキーにアクセスするには、「MyRes.morning」とすればよい。
3. Behaviorオブジェクトからリソースを参照する
これでリソースを利用するための準備は完了だ。あとは、Behaviorオブジェクトから実際にリソースを参照してみよう。ここでは、ターゲット要素がクリックされたときに実行される_onClickイベント・ハンドラを以下(太字部分)のように書き換えるものとする。
|
|
ターゲット要素がクリックされたときに実行される_onClickイベント・ハンドラ |
先ほども述べたように、リソースの内容を参照するには、「リソースの型名.キー名」で記述すればよい。
4. Extenderコントロールの動作を確認する
Extenderコントロールの準備ができたら、別記事の要領でビルドを済ませる。エクスプローラからプロジェクト配下の「/Bin/Debug」(または「/Bin/Release」)フォルダを確認すると、「プロジェクト名.dll」(ここではMyAjaxLib.dll)、および、リソースごとのフォルダ(ここでは「de」「ja-JP」フォルダ)ができているはずなので、これをWebサイト配下の「/Bin」フォルダに配置する。
あとは、別記事で作成済みのDialogButtonServer.aspxに配置してあるScriptManagerコントロールのEnableScriptLocalizationプロパティをtrueに設定するだけだ。
以上を理解したら、実際にDialogButtonServer.aspxを実行してみよう。ブラウザの言語設定によって、冒頭のような結果が得られれば成功だ。なお、IEの場合の言語設定は、メニューバーの[ツール]−[インターネット オプション]を選択して[インターネット オプション]ダイアログを表示し、そのダイアログの[全般]タブにある[言語]ボタンから変更できる。
なお、参考までに、出力されているJavaScriptのコードの中身も確認してみよう(実際に出力されるコードは、例えば「/MsAjaxLib/ScriptResource.axd?d=IM4MYW6yp8fc3lFQB8BivX_3gPXIw9lh32h9
|
|
実際に出力されたJavaScriptのコード |
このリストのように、もともと定義されたBehaviorオブジェクトのコード末尾に、リソース定義のためのオブジェクト・リテラル(太字部分)が追加されていることが確認できるはずだ。このように、アセンブリに組み込まれたリソースは、Behaviorオブジェクトに対してオブジェクト定義として追加されることで認識されるわけだ。
利用可能バージョン:.NET Framework 2.0 利用可能バージョン:.NET Framework 3.0 利用可能バージョン:.NET Framework 3.5 カテゴリ:Webフォーム 処理対象:ASP.NET AJAX 関連TIPS:[ASP.NET AJAX]ローカリゼーション対応を行うには? 関連TIPS:[ASP.NET AJAX]ASP.NET AJAX Control Toolkitを利用するには? 関連TIPS:[ASP.NET AJAX]グローバリゼーション対応を行うには? 関連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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|