|
.NET TIPS Windowsフォームを多言語対応にするには?デジタルアドバンテージ 一色 政彦2005/06/17 |
![]() |
|
|
|
「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フォームの画面デザインを行っているところ。 | |||||||||
|
そして次に、多言語対応のための設定を行っていく。例えばユーザーの環境が「日本における日本語」のときに表示するメッセージ(各コントロールの文字列や画像など)を設定するには、フォームのLanguageプロパティを「日本語 (日本)」に設定変更したうえで、それらのメッセージを修正すればよい。
具体的には、次の画面のようにして行う。
以上の修正が終われば、再び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フォームをビルドすると、このように設定したカルチャごとにフォルダが作成されて、その中にサテライト・アセンブリが生成される。 | ||||||
|
後は例えばユーザーが英語(米国)環境で実行すれば、既定のWindowsフォームが表示され、日本語(日本)の環境で実行すれば、日本語でデザインしたWindowsフォームが表示されるはずだ。
なお本稿のようにVS.NETで国際化対応を行った場合、アプリケーションをユーザーに配布する際には、生成されたサテライト・アセンブリを含むサブディレクトリをすべてセットでユーザーに提供しなければならない。
カルチャ情報を強制的に切り替えるには?
もちろん、単にユーザー環境のカルチャに従うだけでなく、カルチャをプログラム側で強制的に指定することもできる。これを行えば、表示したい言語のデザインを、アプリケーションの実行時に、意図的に切り替えて呼び出すことができる。最後にこのコーディング方法を紹介しておく。
ここで紹介するサンプル・プログラムは、次のような内容のプログラムである。
![]() |
|||||||||
| カルチャを選択してWindowsフォーム・デザインを切り替えるサンプル・プログラム | |||||||||
| カルチャ情報をプログラムで指定することで、表示されるWindowsフォームのデザインを実行時に切り替えることができる。 | |||||||||
|
まずは、すべてのカルチャ情報を、ComboBoxコントロールに追加する。
これには、フォームがロードされたときのイベントをハンドルして、そこに次のコードを記述すればよい。なお.NETでは、各カルチャ情報はCultureInfoクラス(System.Globalization名前空間)のオブジェクトとして提供される。
|
|
| ComboBoxコントロールへのカルチャ情報の設定(C#) | |
| CultureInfoオブジェクトのDisplayNameプロパティでは、「日本語 (日本)」のような表記(ユーザーにとって分かりやすい表示名)を得ることができる。なおリソース・ファイルなどに使われるカルチャ・コード(例えば、「ja」や「ja-JP」などの表記)を得たい場合には、CultureInfoオブジェクトのNameプロパティを取得すればよい。 |
|
|
| ComboBoxコントロールへのカルチャ情報の設定(VB.NET) | |
| 上記のC#の解説を参照されたい。 |
後は[フォームを表示]ボタンがクリックされたときに、ComboBoxコントロールで選択されているカルチャを、現在のスレッドで使用するカルチャとして指定すればよい。この現在のスレッド(=Threadクラスのオブジェクト)は、Threadクラス(System.Threading名前空間)のCurrentThreadプロパティ(=静的プロパティ)から取得できる。
現在のスレッドに対してカルチャ情報を設定するプロパティには、実は、次の2種類がある(どちらもCultureInfoオブジェクトを指定する)。
- ThreadオブジェクトのCurrentCultureプロパティ
- ThreadオブジェクトのCurrentUICultureプロパティ
スレッドの正式なカルチャ情報は1のCurrentCultureプロパティの方だが、Windowsフォームなどのリソース関連では、2のCurrentUICultureプロパティが使われている。従って、ここでは2のCurrentUICultureプロパティの方を設定しなければならない。
これを設定してフォームを表示(Show)すれば、Windowsフォームのデザインが指定したカルチャに合ったものになるはずである。
以上の内容を記述したのが次のコードである。
|
|
| 現在のスレッドに対するUIカルチャ情報の設定(C#) |
|
|
| 現在のスレッドに対するUIカルチャ情報の設定(VB.NET) |
現在のスレッドにWindowsフォームでデザインしていないカルチャが指定された場合は、当然ながら、既定のWindowsフォームのデザインで表示されることになる。これは前述した「(既定値)」→「ニュートラル・カルチャ」→「特定のカルチャ」の継承関係に基づく動作だ。
ちなみに、CurrentCultureプロパティにカルチャ情報を設定する場合、「ニュートラル・カルチャ」を指定することはできないので、注意してほしい。![]()
| カテゴリ:Windowsフォーム 処理対象:リソース 使用ライブラリ:CultureInfoクラス(System.Globalization名前空間) 使用ライブラリ:Threadクラス(System.Threading名前空間) 関連TIPS:[ASP.NET]リソース・ファイル活用で国際化対応サイトを構築するには? 関連TIPS:[ASP.NET]国際化対応サイトをプログラムレスで実現するには? 関連TIPS:VS.NETで画像などのリソースを利用するには?(準備編) |
|
||||||||||||||||||||||||||||
| 「.NET TIPS」 |
TechTargetジャパン
- Kinectが切り開く“夢の近未来” (2012/2/2)
日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか? - 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する - SQL Azure Data Sync入門 (2012/1/30)
SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説 - Windows Phoneアプリ市場の現状を分析する (2012/1/27)
Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -







