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

作成者: Scott Cate

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

はじめに

Microsoft の ASP.NET テクノロジは、オブジェクト指向のイベント ドリブン プログラミング モデルを提供し、コンパイルされたコードの利点と結び付けます。 ただし、そのサーバー側処理モデルにはテクノロジに固有のいくつかの欠点があり、その多くは、.NET Framework 3.5 に Microsoft AJAX Services をカプセル化する 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 スクリプト ライブラリは、.NET アプリケーションで既に使用されている .resx ファイル形式を利用します。これにより、統合 IDE のサポートと共有可能なリソースの種類が提供されます。

このホワイトペーパーは、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 はスペイン語のコロンビアを表します。

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

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

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

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

  1. ASP.NET AJAX 拡張機能が統合された新しい Web サイト プロジェクトを作成します。 LocalizingResources というソリューション内に、クラス ライブラリ プロジェクトという別のプロジェクトを作成します。
  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: FILENAME を削除してもよろしいですか?

    削除済み: FILENAME が削除されました。

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

    VerifyDelete: Est seguro que desee quitar FILENAME?

    削除済み: 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 サイト プロジェクトから LocalizingResources プロジェクトへの参照を追加します。
  3. default.aspx の Web サイト プロジェクトで、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 アプリケーションをもう一度起動します。 今回は、スペイン語でファイルを削除するように求められます。

Windows インターネット エクスプローラー ダイアログを示すスクリーンショット。スペイン語のプロンプトが表示され、[OK] をクリックします。

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

スペイン語でファイルを削除するプロンプトを示すスクリーンショット。

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

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

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

デプロイに静的スクリプト ファイルを使用すると、固有の .NET ローカライズ スキームを使用する利点の一部が失われます。 主に表示されるのは、スクリプト リソース ファイルを含めることによって生成された自動型が失われることです。上のチュートリアルでは、たとえば、ScriptManager コントロールから Message という名前の自動生成された型によってリソースが公開されました。

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

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

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

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

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

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

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

まとめ

Web アプリケーションがより多くのユーザーに届くにつれて、より広範な文化やコミュニティに到達できる必要性がビジネス モデルの中核となります。eコマース Web アプリケーションは外貨を処理できる必要があります。コンテンツ管理システムは、コンテンツだけでなく、他の言語でナビゲーション ヒントやフォーム フィールドを表示できる必要があり、企業はこのニーズにアクセスできることを知る必要があります。

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

経歴

Scott Cate は 1997 年から Microsoft Web テクノロジと協力し、myKB.com (www.myKB.com) の社長として、ナレッジ ベース ソフトウェア ソリューションに焦点を当てた ASP.NET ベースのアプリケーションの作成を専門としています。 Scott は、メールまたは自分のブログ ( scott.cate@myKB.com ScottCate.com) で連絡できます