私は過去にグローバリゼーション設定を使用しましたが、この質問のトピックである.NET環境内では使用していません。私が見ているのは、確かに私がまだ学んでいない知識によるものなので、以下の照明をいただければ幸いです。
セットアップ:私のデフォルトの言語設定は英語です(特にen-us)。開発システム(WinXP)に第2言語(デンマーク語)を追加し、言語バーを開いて、どちらかを自由に選択できるようにしました。
言語バーでデンマーク語を選択してからメモ帳を開くと、言語バーで言語が英語に戻っていることがわかりました。言語設定がアプリケーションごとであることを理解しているので、メモ帳がデフォルトを英語に戻したようです。(Windows、つまりメモ帳が世界中で使用されているので、奇妙だと思いました。)メモ帳を閉じると、言語バーの設定がデンマーク語に戻りました。次に、開いているカスタムWinFormアプリケーション(言語が設定されていないことがわかっています)を起動しました。また、開いたときに英語からデンマーク語に戻り、終了するとデンマーク語に戻りました。
質問#1A:起動時にWinFormアプリケーションを取得して、言語バーの現在の設定を継承するにはどうすればよいですか?私の実験では、各アプリケーションはシステムのデフォルトで起動し、アプリの実行後にユーザーが手動で変更する必要があることが示されているようです。これは、複数の言語で作業したい人にとっては大きな不便のようです。
質問#1B:実際、多言語シナリオで言語を手動で設定する必要がある場合、アプリの起動を別の言語でテストできるように、デフォルトのシステム言語(デンマーク語など)を変更するにはどうすればよいですか?
この次の実験のために、アプリケーションに現在の言語の表示を追加しました。具体的にはMouseEnter
、ツールチップをに設定するラベルにハンドラーを設定したCultureInfo.CurrentCulture.Name
ので、マウスオーバーするたびに現在の言語設定が表示されるはずだと思いました。アプリを起動する前に言語を設定しても機能しなかったため、アプリを起動してから言語をデンマーク語に設定しました。(TextBoxに入力するなど)いくつかのことがこのデンマーク語の設定を尊重していることがわかりました。しかし、インストルメントされたラベルにマウスを合わせると、まだen-usが表示されました。
質問#2A:CultureInfo.CurrentCulture.Name
アプリの他の部分が変更を認識しているように見えるのに、言語バーからの変更が反映されないのはなぜですか?(試しCultureInfo.CurrentUICulture.Name
てみると同じ結果が得られました。)
質問#2B:言語設定が変更されたときにアプリ内で認識できるように、言語バーの変更時に発生するイベントはありますか?
2010.05.13更新
マイクロソフトからエリックによって提供された短いが甘い情報(以下の彼の答えを参照)は、私の4つの質問(#2A)の1つだけに直接対処しましたが、それは私がさらに掘り下げて残りを理解するために必要な推進力を提供しました。これにも戸惑うかもしれない他の人の利益のために、ここに私が発見したものがあります:
回答#1A:アプリケーションは、言語バーで指定した言語ではなく、デフォルトの入力言語の設定を継承します。アプリケーションが実行されると、言語バーの変更はアプリによってすぐに通知されます。
回答#1B:デフォルトの入力言語の設定は、[地域と言語のオプション]コントロールパネル>>[言語]タブ>>[詳細]>>[設定]タブ>>デフォルトの入力言語で行います。
回答#2A:エリックが回答した現在の文化は、言語バーに反映されている現在の入力言語とは異なります。テキストボックスへの入力は、現在の入力言語によってのみ影響を受けます。
回答#2B:入力言語または現在のカルチャ変更通知のいずれにも事前定義されたイベントはありません。ここで注意すべき重要な事実は、入力言語の変更はすぐに自動的に認識されますが、現在の文化の変更は認識されないということです。現在のカルチャの変更を有効にするには、アプリケーションを再起動する必要があります。ただし、変更に気づき、自分で対応できる場合を除きます。そのために、変更に気付くためのフックを提供するMSDNの記事(CultureInfoクラスの多くの面)を見つけました。