【ASP.NET】マルチリンガル対応(多言語化) その1

主な方法

* 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