CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
のようなものを書くことによってそれを得ることができますが、現時点のアプリケーションで構成された、あなただけのCultureInfoを取得することができ、この方法は、開始されたと設定が、その後変更されている場合は更新されません。
現在、コントロールパネル - >地域と言語の設定でCultureInfoを設定する方法はありますか?
CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
のようなものを書くことによってそれを得ることができますが、現時点のアプリケーションで構成された、あなただけのCultureInfoを取得することができ、この方法は、開始されたと設定が、その後変更されている場合は更新されません。
現在、コントロールパネル - >地域と言語の設定でCultureInfoを設定する方法はありますか?
をLINQ to WMIを使用することができます。しかし、MSDNによると:
ClearCachedData方法は だから、あなたが最初の関数を呼び出してから、開始する必要があります 既存のスレッド
ため Thread.CurrentCultureプロパティ内の情報は更新されません。新しいスレッド。この新しいスレッドでは、CurrentCultureを使用してカルチャの新しい値を取得できます。あなたもCurrentUICultureのをリセットする必要がある場合は、あなたがそれを行う必要があることを
class Program
{
private class State
{
public CultureInfo Result { get; set; }
}
static void Main(string[] args)
{
Thread.CurrentThread.CurrentCulture.ClearCachedData();
var thread = new Thread(
s => ((State)s).Result = Thread.CurrentThread.CurrentCulture);
var state = new State();
thread.Start(state);
thread.Join();
var culture = state.Result;
// Do something with the culture
}
}
注意、別途
Thread.CurrentThread.CurrentUICulture.ClearCachedData()
Thread.CurrentThread.CurrentCulture.ClearCachedData()
これは、次回のアクセス時にカルチャデータが再読み込みされるように見えます。 @ChristianがClearCachedDataを使用する方法であり、提案されているよう
がSystemInformation
クラスで必要な設定を見つけるかSystem.Management/System.Diagnostics
のクラスを使用してWMIに見てみてください、あなたも
は、私たちは、WinFormsのアプリで、この問題にに走り、それがためでしたVisual Studioは、[MyApp] .vshost.exeプロセスを作成します。このプロセスは、Visual Studioが開いているときは常にバックグラウンドで実行されます。
MyApp - >プロパティ - >デバッグ - > [Visual Studioホスティングプロセスを有効にする]の設定をオフにすると、これが修正されました。
vshostプロセスは主にデバッグの改善に使用されますが、設定を無効にしたくない場合は、必要に応じてプロセスを強制終了できます。
この問題を特定できませんでした....このソリューションは私たちのために働いた!!ありがとうございましたjjacka !!!! – Jamie
Win32 API関数GetSystemDefaultLCIDを使用できます。 signitureは以下の通りである:
[DllImport("kernel32.dll")]
static extern uint GetSystemDefaultLCID();
GetSystemDefaultLCID関数は、LCIDを返します。それはfolowingテーブルから言語の文字列をマップすることができます。 Locale IDs Assigned by Microsoft
これに似ていますが、私はGetUserDefaultLCID()を代わりに使用しましたが、私はユーザー設定を取得しました。私はシステムのデフォルトがインストール済みのロケールだと思います。 – Colin
[DllImport( "kernel32.dll")] 静的なextern int GetSystemDefaultLCID(); var name = new System.Globalization.CultureInfo(GetSystemDefaultLCID())。名前。 –
名前空間System.Globalization
のクラスCultureInfo
とTextInfo
があります。どちらのクラスも、コントロールパネルで定義された複数のウィンドウの地域設定を取得します。使用可能な設定の一覧は、ドキュメントに記載されています。例えば
:
string separator = CultureInfo.CurrentCulture.TextInfo.ListSeparator;
が実行されているプログラムのリストセパレータを得ています。
[DllImport("kernel32.dll")]
private static extern int GetUserDefaultLCID();
public static CultureInfo CurrentCultureInRegionalSettings => new CultureInfo(GetUserDefaultLCID());
ニースダーリン! –
エラーが発生しました型または名前空間の名前 'State'が見つかりませんでした(使用するディレクティブまたはアセンブリ参照がありません): var thread = new Thread( s =>((State) s).Result = Thread.CurrentThread.CurrentCulture); 問題は状態参照にあります。どのようにこれを解決するための任意のアイデアですか? Tks – Pascal
@Pascal、 'State'は' Program'クラスの中で定義したプライベートクラスですが、それを外部化して公開することができます。また、 '状態'はおそらく非常に良い名前ではないので、より意味のある何かに名前を変更してみてください。 –