1. ホーム
  2. c#

[解決済み] アプリケーション全体にカルチャを設定する方法はありますか?すべての現在のスレッドと新しいスレッド?

2022-04-21 17:05:52

質問

アプリケーション全体にカルチャを設定する方法はありますか?すべての現在のスレッドと新しいスレッドですか?

データベースにカルチャーの名前を保存しておき、アプリケーションが起動したときに、次のようにします。

CultureInfo ci = new CultureInfo(theCultureString);
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;

しかし、もちろん、新しいスレッドで何かをしたいとき、これは "lost" になってしまいます。そこで CurrentCultureCurrentUICulture をアプリケーション全体に適用するのですか?新しいスレッドもその文化を取得するように?それとも、新しいスレッドが作成されるたびに発生するイベントで、それにフックすることができるのでしょうか?

解決方法は?

.NET 4.5では、(1)のように CultureInfo.DefaultThreadCurrentCulture プロパティを使用して、AppDomain のカルチャを変更できます。

4.5より前のバージョンでは、AppDomainのカルチャを操作するためにリフレクションを使用しなければなりません。 のプライベートな静的フィールドがあります。 CultureInfo ( m_userDefaultCulture .NET 2.0 の mscorlib では。 s_userDefaultCulture を制御する.NET 4.0 mscorlibの) CurrentCulture は、スレッドが自分自身にそのプロパティを設定していない場合に返されます。

これはネイティブスレッドのロケールを変更しないので、この方法でカルチャを変更するコードを出荷するのはおそらく良いアイデアではありません。 しかし、テストには有用かもしれません。