.NET TIPS [ASP.NET]国際化対応サイトをプログラムレスで実現するには?山田 祥寛2004/08/20 |
|
|
別稿「TIPS:リソース・ファイル活用で国際化対応サイトを構築するには?」では、リソース・ファイルを利用することでアプリケーションから言語依存要素を取り除き、将来的な言語の拡張に容易に対応する手法を紹介した。しかし、この手法でリソース・ファイルから動的にリソースを取り出すに法は、定型のロジックをいちいち各ページに記述しなければならないので、いかにも煩雑だ。
そこで、本稿ではカスタム・コントロールを利用して、プログラムレスで国際化対応ページを実現する方法を紹介する。
カスタム・コントロールは、ユーザー・コントロールとも混同しやすいかもしれないが、まったく異なるものであるので注意すること。ユーザー・コントロールは、「既存の」サーバ・コントロールを組み合わせて構築する、いわゆる「コントロールの集合」であるのに対して、カスタム・コントロールは「1から構築する新規の」コントロールだ。見掛け上も、ユーザー・コントロールはほとんど「.aspx」ファイルと同様の構文で記述できるのに対して、カスタム・コントロールはVB.NETやC#で定義されるクラスである。
それではさっそく、具体的なサンプルを見てみることにしよう。
1. カスタム・コントロールを記述する
次のサンプル・コード(I18N.cs/I18N.vb)は、カスタム・コントロール「I18N」を定義するコードである。このコード中のリソース・ファイルの動的な読み込みロジックは、別稿「TIPS:リソース・ファイル活用で国際化対応サイトを構築するには?」で紹介したものとまったく同じなので、そちらを参照してほしい。
|
|
リソース・ファイルを基に適切な文字列を出力するカスタム・コントロール(C#:I18N.cs) |
|
|
リソース・ファイルを基に適切な文字列を出力するカスタム・コントロール(VB.NET:I18N.vb) |
カスタム・コントロールを定義するために必要な条件は、以下のとおりだ。
(1)System名前空間、System.Web名前空間、System.Web.UI名前空間をインポートする
カスタム・コントロールを定義するには、最低限、System名前空間、System.Web名前空間、System.Web.UI名前空間を必要とする。もちろん、クラス内で必要なそのほかの名前空間も適宜、Importsステートメント(C#では、Usingディレクティブ)で追加すればよい。
(2)Controlクラスを継承する
Controlクラス(System.Web.UI名前空間)は、サーバ・コントロールが持つべき基本的な機能を実装したクラスだ。すべてのサーバ・コントロールは、Controlクラスを継承しなければならない。
(3)Renderメソッドを記述する
Controlクラスは、ページ描画の際に呼び出されるRenderメソッドを定義している。カスタム・コントロールによって生成される出力は、このRenderメソッドに記述しなければならない。
(4)属性はプロパティ構文で定義する
カスタム・コントロールで使える属性を規定したい場合、Control派生クラス上はプロパティ構文で定義することができる。ここでは、リソースのキー名を表すKey属性を定義しておこう。
2. カスタム・コントロールを配置する
カスタム・コントロールは、使用に先立ってコマンドラインからコンパイルを行う必要がある。コンパイルの構文は以下のとおり。
|
|
C#の場合のコンパイル方法 |
|
|
VB.NETの場合のコンパイル方法 |
コンパイルに成功した場合VB.NET、C#いずれにおいても、I18N.dllが生成されるはずなので、これをアプリケーション・ルート配下の「\bin」フォルダにコピーすればよい。
3. カスタム・コントロールを利用する
これで、任意のWebフォームからカスタム・コントロールを利用することができる。
|
|
カスタム・コントロールを利用したWebフォーム(i18n_custom.aspx) |
カスタム・コントロールを利用する場合には、@Registerディレクティブでコントロールを有効化する必要がある。Assembly属性でカスタム・コントロールが定義されたアセンブリ名を、Namespace属性でカスタム・コントロールが属する名前空間を、そして、TagPrefix属性はカスタム・コントロールの接頭辞を、それぞれ宣言する。TagPrefix属性の値はページ内で一意でさえあれば任意に決めることができる。
これによって、ページ内でWings名前空間に属するカスタム・コントロールを「<wings:〜 />」というタグで呼び出すことができるようになった。そのほか、id、runat属性が必須である点は、一般的なサーバ・コントロールと変わりない。
以上で準備は完了だ。リソース・ファイルを「i18n_custom.aspx」と同一フォルダに配置したうえで、ブラウザを起動してみよう。別稿「TIPS:リソース・ファイル活用で国際化対応サイトを構築するには?」同様、ブラウザの言語設定によって表示言語が動的に切り替われば成功だ。
カテゴリ:Webフォーム 処理対象:リソース 使用キーワード:@Registerディレクティブ 使用ライブラリ:Controlクラス(System.Web.UI名前空間) 関連TIPS:リソース・ファイル活用で国際化対応サイトを構築するには? |
「.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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|