特定の国コードが与えられた場合、例: 「CH」、CultureInfoオブジェクトを取得するにはどうすればよいですか?特定の国コードは動的です(実行時に変更されます)。私は国コードしか持っていませんが、just国コードからCultureInfoオブジェクトを作成できるかどうか知りたいです。どの正確な文化(fr-CH/de-CH)を取得するかは関係ありません。
私はこのようなことをしようとしています:
CultureInfo c = CultureInfo.CreateSpecificCulture("CH");
RegionInfoオブジェクトからカルチャを作成することは可能でしょうか?次に、次のようになります。
RegionInfo r= new RegionInfo("CH");
CultureInfo c = CultureInfo.CreateSpecificCulture(r);
明らかに、前述の例はコンパイルされません。それらは、私が達成しようとしていることのアイデアを与えるだけです。
国コードしかない場合は、次のようなものを使用して、その国に関連付けられているすべての文化情報を取得できます。
var cultureInfos = CultureInfo.GetCultures(CultureTypes.AllCultures)
.Where(c => c.Name.EndsWith("-CH"));
編集:@JeppeStigNielsenが指摘しているように、エッジケースを防ぐためにCH
の前に-
を追加します(以下のコメントを参照)。
CultureInfoオブジェクトを作成しようとしていますか?このような:
CultureInfo c = new CultureInfo("de-CH"); //culture for German (Switzerland)
CultureInfo c = new CultureInfo("fr-CH"); //culure for French (Switzerland)
CultureInfo c = new CultureInfo("it-CH"); //culture for Italian (Switzerland)
たぶん、このリンクは役に立つかもしれません http://www.csharp-examples.net/culture-names/ それはすべての文化を示しています。
もちろん、これは醜いことです。国(例の_"CH"
_スイスを含む)には多くの言語がある可能性があるからです。
それでも、私はあなたに2つの醜い方法を提供します。最初の1つ:
_static IEnumerable<CultureInfo> FindCandidateCultures(RegionInfo region)
{
return CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Where(x => (new RegionInfo(x.Name)).GeoId == region.GeoId);
}
_
特定の例new RegionInfo("CH")
で使用すると、私のバージョンの.NETFrameworkと私のWindowsバージョンで次のようになります。
de-CH:ドイツ語(スイス) fr-CH:フランス語(スイス) gsw-CH:アルザス語(スイス) it-CH:イタリア語(スイス) rm-CH:ロマンシュ語(スイス) wae-CH:ウォルザー(スイス)
私があなたに提供する2番目の方法:
_// ugly reflection, this can break any day!
static CultureInfo ConvertToCulture(RegionInfo region)
{
var data = typeof(RegionInfo).GetField("m_cultureData", BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(region);
var name = (string)(data.GetType().GetProperty("SNAME", BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(data));
return CultureInfo.GetCultureInfo(name);
}
_
明らかなように、それは_mscorlib.dll
_の内部表現を使用しており、将来のバージョンで機能しなくなるかどうかはわかりません。しかし、それはあなたに特定の文化を選ぶ方法を与えます。私のマシンでは、new RegionInfo("CH")
からit-CH: Italian (Switzerland)
を取得します。