WinForm アプリでユーザーの言語設定を尊重/継承するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2820843

質問

私は過去にグローバリゼーション設定を使用したことがありますが、この質問のトピックである .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 更新

Microsoft の Eric が提供してくれた短くても有益な情報 (以下の彼の回答を参照) は、私の 4 つの質問のうち 1 つ (#2A) のみに直接対処しましたが、それは私がさらに掘り下げて残りを理解するのに必要な刺激を与えてくれました。これに当惑している他の人たちのために、私が明らかにしたものを以下に示します。

答え #1A: アプリケーションはデフォルトの入力言語の設定を継承します。 ない 言語バーで指定した言語。アプリケーションが実行されると、言語バーが変わります 意思 アプリによってすぐに認識されます。

答え #1B: デフォルトの入力言語の設定は、[地域と言語のオプション] コントロール パネル >> [言語] タブ >> [詳細] >> [設定] タブ >> デフォルトの入力言語で行います。

答え #2A: Eric の回答では、現在の文化は、言語バーに反映されている現在の入力言語とは異なります。テキスト ボックスへの入力は、現在の入力言語によってのみ影響されます。

答え #2B: 入力言語または現在のカルチャ変更通知のいずれにも事前定義されたイベントはありません。ここで注意すべき重要な事実は、入力言語の変更はすぐに自動的に認識されるが、現在の文化の変更は認識されないということです。現在のカルチャの変更を有効にするには、アプリケーションを再起動する必要があります。ただし、自分で変更に気づいて対応できない場合は除きます。そのために、MSDN の記事を見つけました (CultureInfo クラスのさまざまな側面)これは、変更に気づくためのまさにそのようなフックを提供します。

役に立ちましたか?

解決

3 つの個別の言語設定が使用されます。言語バーは入力言語を制御します (入力言語) UI を表示するための言語 (CurrentUICulture) とは異なり、並べ替え/書式設定/解析のための言語 (CurrentCulture) とは異なります。

これが混乱を招くのは事実です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top