ISO 3166-1 TwoLetters 国名 - "MD" で地域情報を取得しようとしています。
var r = new RegionInfo("MD");
しかし、私は次の例外を取得しています:
カルチャ名 'MD' はサポートされていません。
サポートされている国のモルドバの Microsoft テーブルが存在するため、これは奇妙です。
ISO 3166-1 TwoLetters 国名 - "MD" で地域情報を取得しようとしています。
var r = new RegionInfo("MD");
しかし、私は次の例外を取得しています:
カルチャ名 'MD' はサポートされていません。
サポートされている国のモルドバの Microsoft テーブルが存在するため、これは奇妙です。
カルチャ名に関する RegionInfoの MSDN ドキュメントによると:
定義済みのカルチャ名は、Go Global Developer Center の National Language Support (NLS) API Reference にリストされています。
National Language Support (NLS) API ReferenceにアクセスするとMD
、そこには見つかりません。
独自の文化情報を作成できます。
Visual Studio を管理者として実行します。プロジェクトで、sysgloblへの参照を追加します。
using System;
using System.IO;
using System.Globalization;
using System.Linq;
using System.Xml.Linq;
class Program
{
public static void Main()
{
CultureAndRegionInfoBuilder cib = null;
try
{
// Create a CultureAndRegionInfoBuilder
// object named "ro-MD".
cib = new CultureAndRegionInfoBuilder(
"ro-MD", CultureAndRegionModifiers.None);
// Populate the new CultureAndRegionInfoBuilder
// object with culture information.
CultureInfo ci = new CultureInfo("ro-RO");
cib.LoadDataFromCultureInfo(ci);
// Populate the new CultureAndRegionInfoBuilder
// object with region information.
RegionInfo ri = new RegionInfo("RO");
cib.LoadDataFromRegionInfo(ri);
var filePath = "ro-MD.xml";
if (File.Exists(filePath))
File.Delete(filePath);
// Save as XML
cib.Save(filePath);
// TODO: modify the XML
var xDoc = XDocument.Load(filePath);
var ns =
"http://schemas.microsoft.com/globalization/2004/08/carib/ldml";
xDoc.Descendants(XName.Get("regionEnglishName", ns))
.FirstOrDefault().Attribute("type").SetValue("Moldova");
xDoc.Descendants(XName.Get("regionNativeName", ns))
.FirstOrDefault().Attribute("type").SetValue("Moldova");
// and so on
xDoc.Save(filePath);
var roMd = CultureAndRegionInfoBuilder
.CreateFromLdml(filePath);
// this may throw an exception if the culture info exists
try
{
CultureAndRegionInfoBuilder.Unregister("ro-MD");
}
catch (Exception)
{
//throw;
}
// Register the custom culture.
roMd.Register();
// Display some of the properties of the custom culture.
var riMd = new RegionInfo("ro-MD");
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
}
XML の変更だけを行う必要があります。
注: 管理者権限なしでカルチャを保存することもできるようです。ここに参照があります:方法: 管理者権限なしでカスタム カルチャを保存する。私はそれを自分でテストしていませんが、その記事に関する唯一のコメントは、それが機能しないことを示唆しているようです.
[アップデート]
これも興味深いアプローチです (ネイティブ メソッドを呼び出すためのラッパー)。
System.Globalization.RegionInfo はカルチャ データを使用し、その地域にカルチャ データがない場合は成功しません。そのため、その地域で言語のカスタム カルチャを作成すると、それが成功します。
おそらく代わりに、現在のすべての ISO-3166 国をサポートする新しいWindows.Globalization.GeographicRegionを使用することをお勧めします。
または、上記のドキュメントに示されているように、Moldova をサポートしているため、GetGeoInfo および EnumSystemGeoId に p/Invoke することもできます。