.NET TIPS

[ASP.NET AJAX]グローバリゼーション対応を行うには?[2.0、3.0、3.5、C#、VB]

山田 祥寛
2008/05/01

 昨今、「1つのサイトで複数の言語に対応したい」というケースはけっして珍しくない。特にビジネス用途においては、対象となる顧客層も拡大する中、最低でも日本語/英語、場合によっては中国語/フランス語など複数の言語に対応しなければならない状況は、日に日に増大している。

 グローバリゼーション(Globalization)とは、このような多言語対応のサイト(アプリケーション)を実装する場合に行うべきプロセスの1つで、要は、

アプリケーションから特定のカルチャ(地域)に依存した情報を取り除くこと

をいう。

 例えば、日付や数値/通貨の表記を想定してみるとよい。日本語(日本)であれば「2008年5月13日 10:46:25」「¥123.45」のように表記するところを、英語(米国)であれば「Tuesday, May 13, 2008 10:46:25 AM」「$ 123.45」のように表記するし、ドイツ語(ドイツ)であれば「Dienstag, 13. Mai 2008 10:46:25」「123,45 € 」のような表記となる。このような表記の違いをアプリケーション側で吸収しようとすれば、なかなかに厄介なことであるが(*1)、Microsoft AJAX Library(以降、MS AJAX Lib)では国際化対応のメソッドが用意されており、カルチャの判定からこれに応じた書式の適用までを自動化することができる。

*1 JavaScript標準のメソッドとして、日付をロケールに応じた書式に整形するtoLocaleString/toLocaleDateString/toLocateTimeStringメソッドもあるが、これらの書式は実装に依存する。このため、環境によって必ずしも得られる結果が等しくならないので注意すること。

「日本語(日本)」から「英語(米国)」に変更
クライアントの言語設定に応じて表記を動的に変更

 それではさっそく、具体的なサンプルの作成手順を見てみよう。なお、本サンプル・プログラムを動作させるに当たっては、「DBプログラミング 7つのヒント − 同時実行制御からASP.NET AJAXまで −」の内容に従って、ASP.NET AJAXをインストールしておく必要がある(*2)。

*2 ただし、ASP.NET 3.5ではASP.NET AJAXは標準で搭載されているので、追加インストールは不要である。

1. ASP.NETのグローバリゼーション設定を有効にする

 MS AJAX Lib(ASP.NET AJAX)のグローバリゼーション機能を利用する場合、まずアプリケーション構成ファイル(Web.config)に対して、カルチャに関する設定を行っておく必要がある。

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  ……中略……
  <system.web>
  ……中略……
    <globalization culture="auto" uiCulture="auto"/>
  ……中略……
  </system.web>
  ……中略……
</configuration>
ASP.NET AJAXでグローバリゼーション機能を利用するための設定コード(Web.config)

 カルチャに関する設定を行うのは、<globalization>要素の役割だ。culture属性はリクエスト処理に際して使用するカルチャを、uiCulture属性は地域依存のリソースを処理するためのカルチャを、それぞれ宣言する(*3)。ここではクライアントの設定に応じて、カルチャを自動的に判定したいので、いずれも“auto”(自動設定)としておこう。

*3 厳密には、グローバリゼーションの段階ではuiCulture属性の設定は不要である。ただし、後日紹介するローカリゼーションの段階ではこの属性が必要となってくるので、通常はまとめて設定しておくことをお勧めしたい。

2. 新規のWebフォームを作成する

 新規のWebフォーム(Format.aspx)を作成したら、フォーム・デザイナから以下の画面の要領でサーバ・コントロールを配置する。また、ページに配置したサーバ・コントロール、要素のプロパティを以下の表の要領で設定しておこう。

Format.aspxのフォーム・レイアウト
フォーム上に配置するコントロールは以下のとおり。
コントロール(ID) プロパティ 設定値
ScriptManager(manager) EnableScriptGlobalization True
Label(lblDateTime) Text △(ブランク)
Label(lblCurrency) Text △(ブランク)

 ASP.NET AJAXでグローバリゼーション機能を利用するには、ScriptManagerコントロールのEnableScriptGlobalizationプロパティをTrue(デフォルトはFalse)に設定しておく必要がある。

3. 日付/数値を整形するためのクライアントサイド・スクリプトを記述する

 最後に、フォームに配置したラベルにそれぞれカルチャに応じた日付/数値(通貨)を表示するためにJavaScriptのコードを記述する。

<script type="text/javascript">
<!--
var d = new Date();
var n = 123.45;
$get('lblDateTime').innerHTML = d.localeFormat('F');
$get('lblCurrency').innerHTML = n.localeFormat('C');
//-->
</script>
カルチャに応じて、日付/数値を整形するJavaScriptのコード(Format.aspx)

 Date.localeFormat、Number.localeFormatメソッドは、MS AJAX Libが提供する基本オブジェクト拡張(*4)の1つで、与えられた日付/数値を指定された形式で整形するものだ。localeFormatメソッドで指定可能な書式指定子は、以下のとおり。

分類 指定子 概要
日付 d 日付(短い形式) 2008/04/05
D 日付(長い形式) 2008年4月5日
t 時刻(短い形式) 10:34
T 時刻(長い形式) 10:34:09
F 日付/時刻(完全。長い形式の日時) 2008年4月5日 10:34:09
Y、y 年月 2008年4月
M、m 月日のみ 4月5日
s ISO 8601形式 2008-04-05T10:34:09
数値 C 通貨 ¥123
D 10進数(D8のようにけた数指定も可能) 123.45
N 数値(N4のように小数点以下けた数の指定も可能) 123.45
P パーセント表記(変換後の数値に100を乗算) 123.45%
数値/日付データの書式指定子(主要)

*4 MS AJAX Libでは、JavaScript標準のArrayやString、Date、Numberといった基本オブジェクトを拡張した機能を提供している。これを基本オブジェクト拡張と呼ぶ。

 以上を理解したら、実際にFormat.aspxを実行してみよう。ブラウザの言語設定によって、冒頭のような結果が得られれば成功だ。なお、IEの場合の言語設定は、メニュー・バーの[ツール]−[インターネット オプション]を選択して[インターネット オプション]ダイアログを表示し、そのダイアログの[全般]タブにある[言語]ボタンから変更できる。

 ちなみに、ここではlocaleFormatメソッドを例に挙げているが、MS AJAX Libでは与えられた書式を基に文字列を解析し、日付/数値に変換するDate.parseLocale(http://msdn2.microsoft.com/ja-jp/library/bb397521.aspx)、Number.parseLocale(http://msdn2.microsoft.com/ja-jp/library/bb310985.aspx)メソッドも用意されている。詳しくは、MSDNライブラリのそれぞれ該当するページも参照されたい。

●参考:カルチャ情報を取得する

 MS AJAX Libでカルチャ情報を管理するのは、Sys.CultureInfoオブジェクトの役割だ。Sys.CultureInfoオブジェクトでは以下のようなフィールドを公開しており、これらを利用することで、カルチャ、および、カルチャに対応する書式情報に関する情報を確認できる。

フィールド 概要
CurrentCulture 現在のカルチャ(Sys.CultureInfoオブジェクト)
InvariantCulture カルチャに依存しない情報(Sys.CultureInfoオブジェクト)
dateTimeFormat カルチャに依存した日付書式情報(DateTimeFormatInfoオブジェクト)
numberFormat カルチャに依存した数値書式情報(NumberTimeFormatInfoオブジェクト)
name カルチャ名
Sys.CultureInfoオブジェクトのフィールド

 dateTimeFormat/numberFormatフィールドは、それぞれ日付/数値の書式情報を含むオブジェクトを返す。厳密には、これらフィールドの戻り値は匿名オブジェクトであるが、これらが公開するプロパティは.NET Frameworkで提供されているDateTimeFormatInfoNumberTimeFormatInfoオブジェクト(System.Globalization名前空間)のそれとかなり重なっている。詳細は、こちらのメンバを参考にするとよいだろう。

 例えば、現在のカルチャにおける完全な日付時刻形式のパターン文字列を取得したいならば、以下のように記述すればよい。

window.alert(Sys.CultureInfo.CurrentCulture.dateTimeFormat.FullDateTimePattern);

 現在のブラウザ設定が「日本語(日本)」の場合、「dddd, d. MMMM yyyy HH:mm:ss」のような結果が得られるはずだ。End of Article

利用可能バージョン:.NET Framework 2.0
利用可能バージョン:.NET Framework 3.0
利用可能バージョン:.NET Framework 3.5
カテゴリ:Webフォーム 処理対象:ASP.NET AJAX

この記事と関連性の高い別の.NET TIPS
Windowsフォームを多言語対応にするには?
[ASP.NET]リソース・ファイル活用で国際化対応サイトを構築するには?
[ASP.NET AJAX]ローカリゼーション対応を行うには?
[ASP.NET AJAX]ローカリゼーション対応を行うには?(アセンブリ組み込み編)
数値を4けた区切りの文字列に変換するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間