主な方法
* ASP.NET(2.0以上)の多言語化については、リソースファイルを利用するのだが、主な方法として、以下がある[1] グローバル・リソースを利用する方法 [2] ローカル・リソースを利用する方法 →特定のWebフォームに対する多言語化 (「1Webフォーム:1リソースファイル」の関係) [3] 暗黙的なローカル・リソースを利用する方法
[1]の実装手順例
手順
(1) Webフォームを作成する(ここでは、「Error.aspx」とする) (2) ソリューションエクスプローラのプロジェクト名を右クリックじ、[追加]-[ASP.NETフォルダーの追加]-[App_GlobalResources]を選択 (3) 手順(2)の配下に、リソースファイルを追加(ここでは、「ErrorResources.resx」とする) (4) 生成したリソースファイル(ErrorResources.resx)を同じ階層にコピー&ペーストし、『ErrorResources[.カルチャ名].resx(例えば、「ErrorResources.ja-JP.resx」や「ErrorResources.en-US.resx」)』にリネームする (5) 生成したリソースファイルをそれぞれ、キーに対する値の文言を入力する ~~~ 【Error.aspx.resx】 * Title :Error page * ErrorMessage :Error page is coming! 【Error.aspx.ja-JP.resx】 * Title :エラーページ * ErrorMessage :エラーになりました! ~~~ (6) サーバコントロールを配置する (7) 多言語した部分に『<%$ Resources:【リソースファイル名】,【キー名】 %>』を以下のように追記する ~~~> ・・・ <asp:Literal ID="Literal1" runat="server" Text="<%$ Resources:ButtonsResources, ErrorMessage %>"></asp:Literal> ~~~
[2]の実装手順例
ファイル構成(リソースファイル生成前)
/ (ルート) | +- Errors | +- Error.aspx
手順
(1) Webフォームを作成する(ここでは、「Error.aspx」とする) (2) サーバコントロールを配置する(ここでは、「Literal.aspx」とする) (3) 多言語した部分に『<%$ Resources:【キー名】 %>』を以下のように追記する ~~~ <head runat="server"> <title><%$ Resources:Title %></title> </head> ・・・ <asp:Literal ID="Literal1" runat="server" Text="<%$ Resources:ErrorMessage %>"></asp:Literal> ~~~ (4) デザイン部分表示時に、VS の [ツール]-[ローカル リソースの生成]を選択し、Web フォームのリソースを生成する ※VS Expressでは、[ローカル リソースの生成]がない? (5) 生成したリソースファイル(Error.aspx.resx)を同じ階層にコピー&ペーストし、『Error.aspx[.カルチャ名].resx(例えば、「Error.aspx.ja-JP.resx」や「Error.aspx.en-US.resx」)』にリネームする(「ファイル構成(リソースファイル生成後)」になる) (6) 生成したリソースファイルをそれぞれ、キーに対する値の文言を入力する ~~~ 【Error.aspx.resx】 * Title :Error page * ErrorMessage :Error page is coming! 【Error.aspx.ja-JP.resx】 * Title :エラーページ * ErrorMessage :エラーになりました! ~~~
ファイル構成(リソースファイル生成後)
/ (ルート) | +- Errors | +- Error.aspx | +- App_LocalResources | +- Error.aspx.resx +- Error.aspx.ja-JP.resx
[3]の実装手順
* 実は、[2]の実装手順とほとんど変わらずにでき、[2]の実装手順の(3)で該当するサーバコントロールに対し『meta:resourcekey="【キー名】"』を以下のように追記してあげればいい。 ~~~ <head runat="server"> <title><%$ Resources:Title %></title> </head> ・・・ <asp:Literal ID="Literal1" runat="server" meta:resourcekey="Literal1"></asp:Literal> ~~~
多言語化
* Global.Application_BeginRequest()を利用する
Global.asaxについて
http://blogs.yahoo.co.jp/dk521123/25656992.htmlサンプル:Global.asax
' 各要求の開始時に呼び出されます。 Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) ' ここで切り替えることが可能 Thread.CurrentThread.CurrentCulture = _ CultureInfo.CreateSpecificCulture("en-US") Thread.CurrentThread.CurrentUICulture = _ Thread.CurrentThread.CurrentCulture End Sub
予断
「ja-JP」か「ja」どっちにすればいい?
* どうやら「ja-JP」の方がいいっぽい。http://blogs.wankuma.com/ogiogi/archive/2007/12/10/112403.aspx
参考文献
http://msdn.microsoft.com/ja-jp/library/dd229382.aspxhttp://www.atmarkit.co.jp/fdotnet/dotnettips/445aspmultilangres/aspmultilangres.html