« AjaxでJSONを利用する | トップページ | ASP.NETでページの多言語化 Part2 »

2006年8月 6日 (日)

ASP.NETでページの多言語化

開発するアプリケーションが多言語に対応しなれければならないこと、結構あるんじゃないでしょうか。
ブラウザの言語設定を英語に設定して、例えば、IEならMSN、FirefoxならGoogle にアクセスしてみると、自動的に英語のページが表示されます。
(ブラウザの言語設定は、IEの場合はインターネットオプション→全般タブ→言語、Firefoxの場合はオプション→詳細の一般タブ→言語設定からそれぞれ出来ます。)

ASP.NET(.NET Framework)は、このような多言語に対応する仕組みを備えています。
日本語だけでよいなら、ページに直接文字を書き込んだりすることも多いと思いますが、多言語化する場合はリソースを使用します。
ASP.NET 2.0 からは、App_CodeやApp_Dataなどシステムが使用する特殊なフォルダがありますが、同じ種類のフォルダとして App_GlobalResources と App_LocalResources があります。
ここにリソースファイル(.resxファイル)を作成し aspx ファイルに細工をすることで、特別なコードを書かなくとも割りと簡単に対応できるようになります。

まず、テスト用にDefault.aspxというページを作成します。
(Visual StudioでASP.NETのプロジェクトを作成すると初期ページとしてDefault.aspxというページがあると思います。)
次に、App_LocalResourcesフォルダを作成します。
この中に、ページと同じ名前のリソースファイル、この場合はDefault.aspx.resxを作成します。

このファイルにページに表示する単語や文章を登録していくのですが、このファイルは既定のリソースファイルとなりクライアントの言語設定に 一致するリソースファイルが見つからない場合に使用されます。
既定で日本語を表示したい場合は日本語を登録します。

単語を登録する場合は名前と値のペアで登録します。
ここでは、"Language"という名前、"日本語"という値を登録してみます。
さらに、もう1つ、Default.aspx.en-us.resx というファイルをApp_LocalResourcesに作成し、"Language"という名前、"English"という値を 同様に登録しておきます。
ファイル名の en-us 英語(米国)を意味し、クライアントのブラウザが英語の設定ならこちらのリソースが使われます。

次にDefault.aspxを開いて、
<asp:Label ID="Label1" Text="<%$ Resources:Language %>" runat="server" />
と書きます。
リソースファイルの指定の値を取り出すには、<%$ Resources:ResourceFile,Name %>と記述します。
ResourceFileにはリソースファイル名を指定するのですが必須ではなく、指定しなかった場合は、今回のようにページと同じ名前のローカルリソースが ある場合はそれが使われます。
最後に、Pageディレクティブに UICulture="auto" を追加します。
auto にしておくと、クライアントのブラウザの設定に応じて自動的にリソースが選ばれます。
このページをブラウザの言語設定を日本語及び英語に設定してそれぞれ見てみると、適切に言語が選択されているのが確認できると思います。

ただ、言語が変わって影響を受けるのは単純に言葉だけではありません。
例えば日付を表示する場合、日本語では yyyy/mm/dd という書式が一般的ですが、英語の場合は mm/dd/yyyy という書式になります。
これらについても、自動的に処理するために Default.aspxの Page ディレクティブに Culture="auto" も追加して、
<asp:Label ID="Label2" runat="server"><%= DateTime.Now %></asp:Label>
と書き加えてみてください。
日本語と英語の両方で見比べてみると、ちゃんと処理されているのが確認できると思います。

このように、特別にコードを書くことなく対応することが出来ます。
ただ、ページとリソースがペアになっているので、リソースファイルが大量に出来てしまうことになります。
まあ、多言語となると単語の管理が大変なのはある程度は仕方ないとは思いますが。

今回は、Text=<%$ Resources:Language %> という記述方法で単語を設定しましたが、もう1つ指定方法があります。
これについては、また後日書きたいと思います。

また、ローカルリソースはそのページ内でしか使用できませんので、例えばエラーメッセージなど複数のページで 使いまわしたいものを登録するのには向いていません。
そういった場合のためにグローバルリソースというものがあります。
使い方はローカルリソースと同じですので、それについても一緒に次回簡単に書いてみたいと思います。

|

« AjaxでJSONを利用する | トップページ | ASP.NETでページの多言語化 Part2 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/12438/11293794

この記事へのトラックバック一覧です: ASP.NETでページの多言語化:

« AjaxでJSONを利用する | トップページ | ASP.NETでページの多言語化 Part2 »