MSDN の記事「方法: カスタム カルチャを作成する」で説明されている手順に従って、新しいカルチャを作成して登録しました。
var cib = new CultureAndRegionInfoBuilder(CultureName, CultureAndRegionModifiers.None);
cib.LoadDataFromCultureInfo(new CultureInfo("cs-CZ"));
cib.LoadDataFromRegionInfo(new RegionInfo("CZ"));
cib.CultureNativeName = CultureNativeName;
cib.CultureEnglishName = CultureNativeName;
cib.NumberFormat.NumberDecimalSeparator = separator
cib.Register();
すべてがうまく見えます。Windows の [地域と言語] ダイアログで新しいカルチャを確認できます。カルチャをアプリケーションにロードすることもできます。
コントロール パネルの [地域と言語] ダイアログで何かを直接変更すると (NumberDecimalSeparator はコンマ "," ではなくドット "." にする必要があるとします)、カルチャを取得しようとすると:
var ci = CultureInfo.GetCultureInfo(CultureName);
ci.ClearCachedData();
ci = CultureInfo.GetCultureInfo(CultureName);
登録したのと同じ文化情報をまだ持っています。取得した CultureInfo オブジェクトに手動での変更が射影されません。
それは適切な行動ですか、それとも私は何か間違ったことをしていますか?
編集:
もう一度考えてみると、コントロール パネルでカルチャ情報を変更しているユーザーとは異なるユーザー アカウントで IIS でアプリケーションを実行しているのは明らかに問題です。
正しい質問は、すべてのユーザー (または少なくとも IIS ユーザーと一部の管理者ユーザー) に共通するカルチャを登録するにはどうすればよいですか?
私がこれをしたい理由:
- アプリケーションで使用されるフォーマットをカスタマイズできるようにしたい。
- Web アプリケーション内のコントロール パネルにあるものと同等の GUI を作成したくありません。
- 管理者は、コントロール パネルでアプリケーションのフォーマットを簡単に設定できます。