ASP.NET AJAX ローカライズについて理解する

作成者: Scott Cate

ローカライズは、特定の言語やカルチャに対するサポートを設計し、アプリケーションまたはアプリケーション コンポーネントに統合するプロセスです。 Microsoft ASP.NET プラットフォームは、標準の .NET ローカリゼーション モデルを統合することで、標準 ASP.NET アプリケーションのローカライズを広範にサポートします。Microsoft AJAX Framework は、統合モデルを利用して、ローカライズを実行できるさまざまなシナリオをサポートします。

はじめに

Microsoft の ASP.NET テクノロジは、オブジェクト指向のイベントドリブン プログラミング モデルを提供し、コンパイルされたコードの利点と統合します。 ただし、そのサーバー側処理モデルにはテクノロジ固有のいくつかの欠点があります。その多くは、.NET Framework 3.5 に Microsoft AJAX サービスをカプセル化する、System.Web.Extensions 名前空間に含まれる新機能によって対処できます。 これらの拡張機能 (以前は ASP.NET 2.0 AJAX 拡張機能の一部だったが現在は Framework 基本クラス ライブラリの一部) は、多くの優れたクライアント機能を有効にします。 この名前空間のコントロールと機能には、ページ全体の更新を必要としないページの部分的なレンダリング、クライアント スクリプト (ASP.NET プロファイル API を含む) を介して Web サービスにアクセスする機能、ASP.NET サーバー側コントロール セットに表示される多くの制御スキームをミラーするように設計された広範なクライアント側 API が含まれます。

このホワイトペーパーでは、Microsoft AJAX Framework と Microsoft AJAX スクリプト ライブラリにあるローカリゼーション機能について、ローカライズのサポートに関するビジネス ニーズのコンテキストで説明し、.NET Framework が提供する Web アプリケーションでの統合済みのローカライズのサポートについて説明します。 Microsoft AJAX スクリプト ライブラリは、統合 IDE のサポートと共有可能なリソースの種類を提供する、.NET アプリケーションで既に使用されている .resx ファイル形式を利用します。

このホワイトペーパーは、Microsoft Visual Studio 2008 のベータ 2 リリースに基づいています。 また、このホワイトペーパーでは、Visual Web Developer Express ではなく Visual Studio 2008 を使用することを前提としており、Visual Studio のユーザー インターフェイスに従ってチュートリアルを解説します。 一部のコード サンプルは、Visual Web Developer Express で使用できない可能性があるプロジェクト テンプレートを利用します。

ローカリゼーションの必要性

エンタープライズ アプリケーション開発者やコンポーネント開発者には特に、カルチャや言語の違いを認識できるツールを作成する機能がますます必要になっています。 クライアントのロケールに合わせることができるコンポーネントを設計すると、開発者の生産性が向上し、コンポーネントをグローバルに機能させるために必要な作業量が減ります。

ローカライズは、特定の言語やカルチャに対するサポートを設計し、アプリケーションまたはアプリケーション コンポーネントに統合するプロセスです。 Microsoft ASP.NET プラットフォームは、標準の .NET ローカリゼーション モデルを統合することで、標準 ASP.NET アプリケーションのローカライズを広範にサポートします。Microsoft AJAX Framework は、統合モデルを利用して、ローカライズを実行できるさまざまなシナリオをサポートします。 Microsoft AJAX Framework を使用すると、サテライト アセンブリにデプロイするか、静的ファイル システム構造を使用してスクリプトをローカライズできます。

サテライト アセンブリを使用したスクリプトの埋め込み

標準の .NET Framework ローカリゼーション戦略と合致して、リソースをサテライト アセンブリに含めることができます。 サテライト アセンブリには、バイナリにリソースを含める従来の方法より多くの利点があります。どのローカリゼーションも大きいイメージを更新せずにアップデートできるほか、サテライト アセンブリをプロジェクト フォルダーにインストールするだけで追加のローカリゼーションをデプロイできます。また、サテライト アセンブリは、メイン プロジェクト アセンブリを再読み込みすることなくデプロイできます。 これは特に ASP.NET プロジェクトで有益です。増分更新で使用されるシステム リソースの量を大幅に減らし、運用中の Web サイト使用の中断を最小限に抑えることができるためです。

スクリプトは、コンパイル時にアセンブリに含まれるマネージド .resx (またはコンパイル済みの .resources) ファイルに含めることで、アセンブリに埋め込まれます。 その後、アセンブリ レベルの属性を介し、AJAX ランタイムで生成されたコードを使用して、スクリプト アプリケーションでリソースを使用できるようになります。

埋め込みスクリプト ファイルの名前付け規則

Microsoft AJAX Framework スクリプト管理では、スクリプトのデプロイとテストに使用するためのさまざまなオプションがサポートされており、これらのオプションを容易にするためのガイドラインが提供されています。

デバッグを容易にするには:

リリース (運用) スクリプトでは、ファイル名に .debug 修飾子を含めないでください。 デバッグ用に設計されたスクリプトでは、ファイル名に .debug を含める必要があります。

ローカライズを容易にするには:

カルチャに依存しないスクリプトでは、ファイルの名前にカルチャ識別子を含めないでください。 ローカライズされたリソースを含むスクリプトの場合は、ファイル名に ISO 言語コードを指定する必要があります。 たとえば、es-CO はコロンビアのスペイン語を表します。

次の表は、ファイルの名前付け規則の例をまとめたものです。

Filename 意味
Script.js リリース バージョンのカルチャに依存しないスクリプト。
Script.debug.js デバッグ バージョンのカルチャに依存しないスクリプト。
Script.en-US.js 英語 (米国) のリリース バージョンのスクリプト。
Script.debug.es-CO.js スペイン語 (コロンビア) のデバッグ バージョンのスクリプト。

チュートリアル: ローカライズされた埋め込みスクリプトを作成する

注: Visual Web Developer Express にはクラス ライブラリ プロジェクト用のプロジェクト テンプレートが含まれていないため、このチュートリアルでは Visual Studio 2008 を使用する必要があります。

  1. ASP.NET AJAX 拡張機能が統合された新しい Web Site プロジェクトを作成します。 LocalizingResources というソリューション内に、Class Library プロジェクトという別のプロジェクトを作成します。
  2. VerifyDeletion.js という Jscript ファイルを LocalizingResources プロジェクトに追加し、DeletionResources.resx と DeletionResources.es.resx という名前の .resx リソース ファイルを追加します。 前者には、カルチャに依存しないリソースが含まれます。後者にはスペイン語のリソースが含まれます。
  3. 次のコードを VerifyDeletion.js に追加します。
function VerifyDeletion(fileName)
{
 if (confirm(Message.VerifyDelete.replace(/FILENAME/, fileName)))
 {
 Delete(fileName);
 return true;
 }
 return false;
}
function Delete(fileName)
{
 alert (Message.Deleted.replace(/FILENAME/, fileName));
}

JavaScript Regex 構文に慣れていない場合、単一のスラッシュ内のテキスト (前の例では /FILENAME/) は RegExp オブジェクトを表します。 MSDN ライブラリには広範な JavaScript リファレンスが含まれており、JavaScript ネイティブ オブジェクトのリソースはオンラインで見つけることができます。

  1. 次のリソース文字列を DeletionResources.resx に追加します。

    VerifyDelete: Are you sure you want to delete FILENAME?

    Deleted: FILENAME has been deleted.

  2. DeletionResources.es.resx に次のリソース文字列を追加します。

    VerifyDelete: Est seguro que desee quitar FILENAME?

    Deleted: FILENAME se ha quitado.

  3. AssemblyInfo ファイルに次のコード行を追加します。

[assembly: System.Web.UI.WebResource("LocalizingResources.VerifyDeletion.js",
 "text/javascript")]
[assembly: System.Web.UI.ScriptResource("LocalizingResources.VerifyDeletion.js",
 "LocalizingResources.DeletionResources", "Message")]
  1. System.Web および System.Web.Extensions への参照を LocalizingResources プロジェクトに追加します。
  2. Web Site プロジェクトから LocalizingResources プロジェクトへの参照を追加します。
  3. default.aspx の Web Site プロジェクトで、ScriptManager コントロールを次の追加マークアップで更新します。
<asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptLocalization="true">
 <Scripts>
 <asp:ScriptReference Assembly="LocalizingResources" Name="LocalizingResources.VerifyDeletion.js"/>
 </Scripts>
</asp:ScriptManager>
  1. default.aspx で、ページ上の任意の場所に次のマークアップを含めます。
<asp:Button ID="btnDelete" runat="Server" OnClientClick="VerifyDeletion('a.txt');" Text="Delete" />
  1. F5 キーを押します。 メッセージが表示されたら、デバッグを有効にします。 ページが読み込まれたら、[削除] ボタンを押します。 確認を求めるメッセージは英語で表示されます (コンピューターが既定でスペイン語のリソースを優先するように設定されている場合を除く)。
  2. ブラウザー ウィンドウを閉じて、default.aspx に戻ります。 @Page ヘッダー ディレクティブで、Culture と UICulture の auto を es-ES に置き換えます。 もう一度 F5 キーを押して、ブラウザーで Web アプリケーションを再起動します。 今回は、ファイルを削除するように求めるメッセージがスペイン語で表示されるはずです。

Screenshot that shows a Windows Internet Explorer dialog with a Spanish language prompt to click O K.

(クリックするとフルサイズの画像が表示されます)

Screenshot that shows a prompt to delete the file in Spanish.

(クリックするとフルサイズの画像が表示されます)

このチュートリアルにはいくつかのバリエーションがあります。 たとえば、ページの読み込み中に、プログラムがスクリプトを ScriptManager コントロールに登録するようにできます。

静的スクリプト ファイル構造を含める

デプロイに静的スクリプト ファイルを使用すると、本来の .NET ローカリゼーション スキームを使用する際の利点がいくつか失われます。 主に顕著なのは、スクリプト リソース ファイルを含めることで自動的に生成される型が失われることです。たとえば、上のチュートリアルでは、ScriptManager コントロールから Message と呼ばれる自動生成された型によってリソースが公開されています。

ただし、静的スクリプト ファイル構造を使用する利点もいくつかあります。 サテライト アセンブリの再コンパイルと再デプロイを行わずに更新を実行できます。また、静的ファイル構造を使用して、埋め込みスクリプトのオーバーライドや、コンポーネントに付属していない可能性のある、重要度の低い機能を統合することもできます。

Microsoft では、プロジェクトのコンパイル時にスクリプト リソースを自動的に生成することで、バージョン管理の問題を回避することをお勧めします。 広範なスクリプト コード ベースを管理する際は、ローカライズされた各スクリプトにコードの変更が反映されるようにすることがますます困難になる可能性があります。 代替案として、1 つのロジック スクリプトと複数のローカライズ スクリプトだけを管理し、プロジェクトのビルド中にファイルをマージすることもできます。

宣言に含めるリソースがないため、静的スクリプト ファイルは、ScriptManager コントロールの <Scripts> タグの子として <asp:ScriptElement> 要素を追加するか、実行時にページ上の ScriptManager コントロールの Scripts プロパティに ScriptReference オブジェクトをプログラムで追加することによって参照する必要があります。

ローカライズでの ScriptManager とそのロール

ScriptManager を使用すると、ローカライズされたアプリケーションに対していくつかの自動動作が可能になります。

  • 設定と名前付け規則に基づいてスクリプト ファイルを自動的に検索します。たとえば、デバッグ モードのときにデバッグが有効なスクリプトを読み込み、ブラウザーのユーザー インターフェイスの選択に基づいて、ローカライズされたスクリプトを読み込みます。
  • カスタム カルチャを含むカルチャの定義が可能になります。
  • HTTP 経由でのスクリプト ファイルの圧縮が可能になります。
  • スクリプトをキャッシュして、多くの要求を効率的に管理します。
  • 暗号化された URL を介してスクリプトをパイプ処理することで、間接参照のレイヤーをスクリプトに追加します。

スクリプト参照は、プログラムによって、または宣言型マークアップによって ScriptManager コントロールに追加できます。 宣言型マークアップは、Web Site プロジェクト以外のアセンブリに埋め込まれたスクリプトを操作する場合に特に便利です。リビジョンのプッシュ時に、スクリプトの名前が変更されない可能性が高いためです。

まとめ

Web アプリケーションが増え、より多くの対象ユーザーに浸透するにつれて、より広範な文化やコミュニティに到達できるようにすることがビジネス モデルの中核となっています。eコマースの Web アプリケーションは外貨への対応が求められます。コンテンツ管理システムは、コンテンツを提示するだけでなく、他言語でナビゲーション ヒントやフォーム フィールドを表示することが求められ、企業はこうしたニーズが対応可能であることを認識する必要があります。

.NET Framework は本質的に、サテライト アセンブリと XML リソース (.resx) ファイルを利用して、リソース文字列やイメージを検索する統一された方法を提示する、機能豊富なローカリゼーション フレームワークをサポートしています。 Microsoft AJAX Framework や Microsoft AJAX スクリプト ライブラリを含む ASP.NET AJAX 拡張機能は、このプログラミング モデルをクライアント側のコードでサポートすることで、リソース文字列の簡単な検索を実現しています。 サテライト アセンブリは、指定した名前付けスキームに従ったファイル名であれば、ScriptResource.axd を介したスクリプト リソース (実際の .js ファイル) の自動インクルードをサポートします。 このサポートにより、ASP.NET AJAX 拡張機能が、スクリプトのローカライズとアプリケーションのグローバリゼーションを簡略化します。

略歴

Scott Cate 氏は 1997 年から Microsoft Web テクノロジに従事しており、ナレッジ ベース ソフトウェア ソリューションに焦点を当てた ASP.NET ベースのアプリケーションの作成を専門とする myKB.com (www.myKB.com) の社長です。 Scott 氏へのお問い合わせは、メール アドレス scott.cate@myKB.com または彼のブログ ScottCate.com を介して行うことができます。