この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
「TIPS:[ASP.NET]リソース・ファイル活用で国際化対応サイトを構築するには?」や「TIPS:[ASP.NET]国際化対応サイトをプログラムレスで実現するには?」では、ASP.NETのWebフォームを多言語対応させる方法、つまりカルチャ/ロケールの設定(=ユーザー環境の言語コードの設定)に従って表示するメッセージを切り替える方法が紹介されている。
本稿では、Windowsフォームを多言語対応(国際化対応)にする方法を紹介する。なお、本稿ではVisual Studio .NET(以降、VS.NET)を使うことを前提とする。
Windowsフォームに多言語の文字列や画像を設定するには、VS.NETのWindowsフォーム・デザイナ上でフォームを選択し、[プロパティ]ウィンドウにある次のプロパティをそれぞれ設定すればよい。
※ Languageプロパティに設定できる項目は、基本的に「<言語名> (<国・地域名>)」という形式で表記されている。例えば、日本における日本語ならば、「日本語 (日本)」という表記になる。詳しくは後述する。
Windowsフォームを多言語でデザインする際のポイントは、最初に、Languageプロパティを「(既定値)」にしたうえで、すべての基本的な画面デザインを行うことである。次の画面は実際にそれを行っているところだ。
そして次に、多言語対応のための設定を行っていく。例えばユーザーの環境が「日本における日本語」のときに表示するメッセージ(各コントロールの文字列や画像など)を設定するには、フォームのLanguageプロパティを「日本語 (日本)」に設定変更したうえで、それらのメッセージを修正すればよい。
具体的には、次の画面のようにして行う。
以上の修正が終われば、再びLanguageプロパティを「(既定値)」に戻しておこう。そうすると、「(既定値)」の状態で作成した最初のフォーム・デザイン(表示文字列や画像など)に戻るはずだ。
以上でWindowsフォームの多言語対応は完了だ。
以上のようにして設定したプロパティ値が、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回」を参照してほしい)。
後は例えばユーザーが英語(米国)環境で実行すれば、既定のWindowsフォームが表示され、日本語(日本)の環境で実行すれば、日本語でデザインしたWindowsフォームが表示されるはずだ。
なお本稿のようにVS.NETで国際化対応を行った場合、アプリケーションをユーザーに配布する際には、生成されたサテライト・アセンブリを含むサブディレクトリをすべてセットでユーザーに提供しなければならない。
Copyright© Digital Advantage Corp. All Rights Reserved.