「TIPS:[ASP.NET]リソース・ファイル活用で国際化対応サイトを構築するには?」や「TIPS:[ASP.NET]国際化対応サイトをプログラムレスで実現するには?」では、ASP.NETのWebフォームを多言語対応させる方法、つまりカルチャ/ロケールの設定(=ユーザー環境の言語コードの設定)に従って表示するメッセージを切り替える方法が紹介されている。
本稿では、Windowsフォームを多言語対応(国際化対応)にする方法を紹介する。なお、本稿ではVisual Studio .NET(以降、VS.NET)を使うことを前提とする。
Windowsフォームに多言語の文字列や画像を設定する方法
Windowsフォームに多言語の文字列や画像を設定するには、VS.NETのWindowsフォーム・デザイナ上でフォームを選択し、[プロパティ]ウィンドウにある次のプロパティをそれぞれ設定すればよい。
- Localizableプロパティ=「True」
- Languageプロパティ=「<適切な言語>」
※ Languageプロパティに設定できる項目は、基本的に「<言語名> (<国・地域名>)」という形式で表記されている。例えば、日本における日本語ならば、「日本語 (日本)」という表記になる。詳しくは後述する。
Windowsフォームを多言語でデザインする際のポイントは、最初に、Languageプロパティを「(既定値)」にしたうえで、すべての基本的な画面デザインを行うことである。次の画面は実際にそれを行っているところだ。
多言語対応Windowsフォームの基本的な画面デザイン
基本となるWindowsフォームの画面デザインを行っているところ。
(1)フォームを選択した状態でLanguageプロパティを「(既定値)」にする。
(2)Localizableプロパティを「True」にする。
(3)通常のWindowsフォームの構築と同じように、コントロールを配置し、プロパティで外観をカスタマイズしていく。
そして次に、多言語対応のための設定を行っていく。例えばユーザーの環境が「日本における日本語」のときに表示するメッセージ(各コントロールの文字列や画像など)を設定するには、フォームのLanguageプロパティを「日本語 (日本)」に設定変更したうえで、それらのメッセージを修正すればよい。
具体的には、次の画面のようにして行う。
特定のカルチャに対応したWindowsフォームのデザイン
ユーザー環境が「日本語 (日本)」の場合のWindowsフォームをデザインしているところ。
(1)フォームを選択した状態でLanguageプロパティを「日本語 (日本)」に設定変更する。
(2)LabelコントロールやButtonコントロールのTextプロパティを編集して、日本語の表示に修正する。この画面例のように、[プロパティ]ウィンドウを使って、フォーム・デザインをカスタマイズしていく必要があるので、注意してほしい(その理由は、VS.NETのフォーム・デザイナが持つ多言語対応機能を活用しているためだ)。
以上の修正が終われば、再びLanguageプロパティを「(既定値)」に戻しておこう。そうすると、「(既定値)」の状態で作成した最初のフォーム・デザイン(表示文字列や画像など)に戻るはずだ。
以上でWindowsフォームの多言語対応は完了だ。
Windowsフォームのデザインに適用される順序
以上のようにして設定したプロパティ値が、Windowsフォームのデザインに適用される順序は次のとおりだ。
- 「(既定値)」で設定したプロパティ値(=基本の情報)は、すべてのカルチャのWindowsフォーム・デザインに対して適用される(ちなみにこの「(既定値)」は、「インバリアント・カルチャ」とも呼ばれ、Languageプロパティのリストにある「Invariant言語 (Invariant国)」と同じである)
- 続いて、「ニュートラル・カルチャ」(例えば「日本語」などのように「<言語名>」という形式で記述されたカルチャ)で設定したプロパティ値(=差分の情報)が適用される
- 最後に、「特定のカルチャ」(例えば「日本語 (日本)」などのように「<言語名> (<国・地域名>)」という形式で記述されたカルチャ)で設定したプロパティ値(=差分の情報)が適用される(これは「固有カルチャ」と呼ばれることもある)
つまり、ここで設定したプロパティ値には、「(既定値)」→「ニュートラル・カルチャ」→「特定のカルチャ」の(親→子の)順で継承関係がある。
Windowsフォームの多言語対応により生成されるリソース
以上の作業により、ユーザーの実行環境(=カルチャ)に合わせてWindowsアプリケーションの表示内容が(適切な言語のものへと)切り替えられるようになる。
この動作は、そのユーザー環境ごとにアプリケーションが利用するリソース・ファイルが切り替えられることで実現されている。つまり、先ほど設定したLanguageプロパティの設定ごとに、複数のリソース・ファイルがVS.NETプロジェクト内に自動作成されているわけである(リソース・ファイルについては、「TIPS:VS.NETで画像などのリソースを利用するには?(準備編)」を参照してほしい)。
例えば本稿で先ほど作成したWindowsフォームの場合、次の画面のようなリソース・ファイル(.resxファイル)が作成される。
※ 上の画面で説明した「ニュートラル・カルチャ」や「特定のカルチャ」のカルチャ・コード(例えば「ja」や「ja-JP」など)の書き方については、MSDNの「CultureInfoクラス」や「CultureInfo.Nameプロパティ」、「TIPS:[ASP.NET]リソース・ファイル活用で国際化対応サイトを構築するには?」の説明を参考にされたい。ちなみに「(既定値)」のカルチャ・コードは、「""」(空文字列)で表現される。またニュートラル・カルチャの記述形式には例外があり、“zh-CHS”(簡易字中国語)と“zh-CHT”(繁体字中国語)は特定のカルチャのように見えるが、ともにニュートラル・カルチャである。
上の画面のVS.NETプロジェクトをビルドすると、次の画面のように、カルチャごとにフォルダが分けられてDLLファイルが生成される。これらのDLLファイルは、単一のカルチャのリソース(=文字列や画像などの情報)のみを含むアセンブリとなるので、通常のメイン・アセンブリに対比して、「サテライト・アセンブリ」と呼ばれる(サテライト・アセンブリについては「インサイド .NET Framework [改訂版]第2回」を参照してほしい)。
多言語対応のDLLファイルとして生成されたサテライト・アセンブリ
VS.NETで多言語対応したWindowsフォームをビルドすると、このように設定したカルチャごとにフォルダが作成されて、その中にサテライト・アセンブリが生成される。
(1)Debugビルドを行うと、(C#の場合のデフォルトの設定では)このDebugフォルダにメイン・アセンブリ(本稿の例では、WindowsApplication1.exe)が出力される。
(2)メイン・アセンブリが出力された配下にカルチャ・コード名のフォルダ(本稿の例では、「ja」や「ja-JP」)が作成され、その中に各カルチャのサテライト・アセンブリが出力される。
後は例えばユーザーが英語(米国)環境で実行すれば、既定のWindowsフォームが表示され、日本語(日本)の環境で実行すれば、日本語でデザインしたWindowsフォームが表示されるはずだ。
なお本稿のようにVS.NETで国際化対応を行った場合、アプリケーションをユーザーに配布する際には、生成されたサテライト・アセンブリを含むサブディレクトリをすべてセットでユーザーに提供しなければならない。
カルチャ情報を強制的に切り替えるには?
Copyright© Digital Advantage Corp. All Rights Reserved.