6

ISO 3166-1 TwoLetters 国名 - "MD" で地域情報を取得しようとしています。

var r = new RegionInfo("MD");

しかし、私は次の例外を取得しています:

カルチャ名 'MD' はサポートされていません。

サポートされている国のモルドバの Microsoft テーブルが存在するため、これは奇妙です。

http://msdn.microsoft.com/en-us/library/dd374073.aspx

4

3 に答える 3

4

カルチャ名に関する RegionInfoの MSDN ドキュメントによると:

定義済みのカルチャ名は、Go Global Developer Center の National Language Support (NLS) API Reference にリストされています。

National Language Support (NLS) API ReferenceにアクセスするとMD、そこには見つかりません。

于 2013-11-05T10:22:01.463 に答える
3

独自の文化情報を作成できます。

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 の変更だけを行う必要があります。

注: 管理者権限なしでカルチャを保存することもできるようです。ここに参照があります:方法: 管理者権限なしでカスタム カルチャを保存する。私はそれを自分でテストしていませんが、その記事に関する唯一のコメントは、それが機能しないことを示唆しているようです.

[アップデート]

これも興味深いアプローチです (ネイティブ メソッドを呼び出すためのラッパー)。

C# を使用して、Windows がサポートされている国の完全なリストを取得します。

于 2013-11-05T10:41:39.013 に答える
0

System.Globalization.RegionInfo はカルチャ データを使用し、その地域にカルチャ データがない場合は成功しません。そのため、その地域で言語のカスタム カルチャを作成すると、それが成功します。

おそらく代わりに、現在のすべての ISO-3166 国をサポートする新しいWindows.Globalization.GeographicRegionを使用することをお勧めします。

または、上記のドキュメントに示されているように、Moldova をサポートしているため、GetGeoInfo および EnumSystemGeoId に p/Invoke することもできます。

于 2013-11-05T20:16:42.577 に答える