web-dev-qa-db-ja.com

アプリケーション全体でローカリゼーションカルチャーをen-USに強制するにはどうすればよいですか?

アプリケーションの1つで、いくつかのバイト変換といくつかの計算に問題があります。窓にイタリア文化を取り入れて運営している人に貢献することができました。だから私の質問は:私のアプリケーションを実行しているコンピュータで「en-US」を行うための最良の方法は何ですか。以下にコードサンプルがありますが、使用するスレッドがそれを継承するかどうかはわかりません。

[STAThread]
static void Main()
{
    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");

    ...
}
12
Dave

あなたが説明する問題は、 InvariantCulture が存在する理由です。アプリケーションのカルチャを変更するのではなく、不変のカルチャを使用してバックグラウンドでデータ操作/永続化を行い、ユーザーのカルチャに値のレンダリング方法を決定させる必要があります。

15
dahlbyk

コードは現在のスレッドのカルチャを設定しますが、作成された新しいスレッドにはこのカルチャが「継承」されません。必要な文化を自分で設定する必要があります。 (インストールされたWindowsカルチャを使用して新しいスレッドが作成されると思いますが、それについて間違っていることが証明される準備ができています。)

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

個人的には、この振る舞いは煩わしいと思いますが、そうです。

12
Andy