.NET Frameworkにおいては、使用される言語や数値・日時・通貨などの書式、年号・暦などのロケールに関する情報はSystem.Globalization名前空間にあるクラス群を通して取得・参照・設定することが出来ます。 .NET Frameworkでは、これらを指す用語としてカルチャが用いられます。 アンマネージでの実装を表すロケールとは使い分けがなされています。 ここではカルチャに関するクラスとそれらを使った操作について解説します。

なお、この文章ではローカライズや国際化対応をする際に留意しておくべき事項については解説しますが、その具体的な手法については解説しません。 必要に応じて他のドキュメントを参照してください。

また、ブラウザで使用しているフォントによっては、この文章の一部で正しく表示されない文字があるかもしれません。 実行結果についても、実行環境(特に設定されている言語)によって異なる結果となる場合がある点に注意してください。

§1 .NET Frameworkにおけるカルチャ

.NET Frameworkではスレッド毎にカルチャ(ロケール)が関連付けられます。 スレッドに関連付けられるカルチャには次の二種類があります。

スレッドに関連付けられるカルチャの種類
カルチャの種類 目的と動作
書式などに適用されるカルチャ
(CurrentCulture)
数値や日時の書式、文字列におけるデフォルトのソート順序など、カルチャとして定義されているフォーマットを参照するために使われる。

例えば、ToStringメソッドなどで日時を文字列化する際に、ja-JPの環境では"2000/01/23 4:05:06"、en-USでは"1/23/2000 4:05:06 AM"といったように書式が変わるのはCurrentCultureで定義されている書式が参照されることによる。 (§.カルチャと書式・テキスト処理)
リソースに適用されるカルチャ
(CurrentUICulture)
ユーザーインターフェイスに表示されるテキストやメッセージ文字列など、ローカライズされたリソースを参照するために使われる。

例えば、UIにテキストを表示する際に、ja-JPの環境では日本語に翻訳されたテキスト、en-USでは英語に翻訳されたテキストとなるのは、リソースマネージャがCurrentUICultureに応じたテキストを選択することによる。

スレッドに関連付けられるカルチャを表すクラスがCultureInfoクラスで、このクラスは特定のカルチャにおける書式や暦などの情報、カルチャの名称や言語コードなどの情報を参照するためのプロパティを持っています。

§1.1 スレッドのカルチャの参照

現在スレッドに関連付けられているカルチャを取得するには、CultureInfo.CurrentCultureプロパティを参照します。 ユーザーインターフェイスのカルチャを参照するにはCultureInfo.CurrentUICultureプロパティを参照します。

これらはThreadクラスからも参照でき、それぞれThread.CurrentThread.CurrentCultureプロパティThraed.CurrentThread.CurrentUICultureプロパティを参照することで取得できます。

現在のスレッドのカルチャを参照する
using System;
using System.Globalization;
using System.Threading;

class Sample {
  static void Main()
  {
    Console.WriteLine("[CultureInfo]");
    Console.WriteLine("CurrentCulture:   {0}", CultureInfo.CurrentCulture);
    Console.WriteLine("CurrentUICulture: {0}", CultureInfo.CurrentUICulture);

    Console.WriteLine("[Thread.CurrentThread]");
    Console.WriteLine("CurrentCulture:   {0}", Thread.CurrentThread.CurrentCulture);
    Console.WriteLine("CurrentUICulture: {0}", Thread.CurrentThread.CurrentUICulture);
  }
}
実行結果
[CultureInfo]
CurrentCulture:   ja-JP
CurrentUICulture: ja-JP
[Thread.CurrentThread]
CurrentCulture:   ja-JP
CurrentUICulture: ja-JP

デフォルトでは、スレッドのカルチャにはシステムのロケールに該当するカルチャが設定されていますが、任意の時点で変更することが出来ます。

§1.2 スレッドのカルチャの変更

スレッドのカルチャを変更するには、設定したいカルチャのCultureInfoを取得もしくは作成し、Thread.CurrentCultureプロパティに設定します。 現在のスレッドのカルチャを変更するにはThread.CurrentThread.CurrentCultureプロパティを設定します。

Thread.CurrentThread.CurrentCultureプロパティにカルチャを設定すると、その変更はCultureInfo.CurrenCultureプロパティにも反映されます。 この2つのプロパティは常に同じカルチャを返します。

現在のスレッドのカルチャを変更する
using System;
using System.Globalization;
using System.Threading;

class Sample {
  static void Main()
  {
    Console.WriteLine("CultureInfo.CurrentCulture:          {0}", CultureInfo.CurrentCulture);
    Console.WriteLine("Thread.CurrentThread.CurrentCulture: {0}", Thread.CurrentThread.CurrentCulture);
    Console.WriteLine();

    // 現在のスレッドのカルチャをen-US(英語/アメリカ合衆国)に変更
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

    Console.WriteLine("CultureInfo.CurrentCulture:          {0}", CultureInfo.CurrentCulture);
    Console.WriteLine("Thread.CurrentThread.CurrentCulture: {0}", Thread.CurrentThread.CurrentCulture);
    Console.WriteLine();

    // 現在のスレッドのカルチャをde-DE(ドイツ語/ドイツ)に変更
    Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");

    Console.WriteLine("CultureInfo.CurrentCulture:          {0}", CultureInfo.CurrentCulture);
    Console.WriteLine("Thread.CurrentThread.CurrentCulture: {0}", Thread.CurrentThread.CurrentCulture);
    Console.WriteLine();
  }
}
実行結果
CultureInfo.CurrentCulture:          ja-JP
Thread.CurrentThread.CurrentCulture: ja-JP

CultureInfo.CurrentCulture:          en-US
Thread.CurrentThread.CurrentCulture: en-US

CultureInfo.CurrentCulture:          de-DE
Thread.CurrentThread.CurrentCulture: de-DE

§1.2.1 .NET Frameworkのバージョンによる差異

.NET Frameworkのバージョンによってスレッドのカルチャの設定・変更に関して動作が変わっている個所があります。 複数のバージョンを対象としたコードを記述する場合は以下の差異に注意してください。

まず、.NET Framework 4.5.3以降では、CultureInfo.CurrenCultureプロパティからもカルチャの設定を行うことができるようになっています。

.NET Framework 4.5.3以降
CultureInfo.CurrenCultureプロパティは読み書き可能で、このプロパティでも現在のカルチャを設定することができる。 変更はThread.CurrentThread.CurrentCultureプロパティにも反映される。
.NET Framework 4.5.2以前
CultureInfo.CurrenCultureプロパティは読み取り専用のため、このプロパティから現在のスレッドのカルチャを設定することはできない。

これはCurrentUICultureに関しても同様です。


また、.NET Framework 4.0以降では、CurrenCultureプロパティにニュートラルカルチャ(後述)も設定することができるようになっています。

.NET Framework 4.0以降
CurrenCultureプロパティにニュートラルカルチャを設定することもできる。 例外はスローされない。
.NET Framework 3.5以前
CurrenCultureプロパティにニュートラルカルチャを設定することはできない。 設定しようとした場合は例外NotSupportedExceptionがスローされる。 これは書式プロバイダ(詳細:カルチャと書式・テキスト処理・暦)としては使用できないためで、必ず国・地域に固有な(=ニュートラルでない)カルチャを設定しなければならない。

CurrentUICultureプロパティは書式プロバイダとしては用いられないため、ニュートラルカルチャを含む任意のカルチャを設定することができます。

現在のスレッドのカルチャにニュートラルカルチャを設定しようとした場合
using System;
using System.Globalization;
using System.Threading;

class Sample {
  static void Main()
  {
    // 現在のスレッドのカルチャをen-US(英語/アメリカ合衆国)に変更
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

    Console.WriteLine("CultureInfo.CurrentCulture: {0}", CultureInfo.CurrentCulture);

    // 現在のスレッドのカルチャをニュートラルカルチャ"en"に変更しようとする
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en");

    Console.WriteLine("CultureInfo.CurrentCulture: {0}", CultureInfo.CurrentCulture);
  }
}
.NET Framework 3.5以前での実行結果
CultureInfo.CurrentCulture: en-US

ハンドルされていない例外: System.NotSupportedException: カルチャ 'en' はニュートラル カルチャです。フォーマットや解析に使用できません、スレッドの現在のカルチャとして設定することもできません。
   場所 System.Globalization.CultureInfo.CheckNeutral(CultureInfo culture)
   場所 System.Threading.Thread.set_CurrentCulture(CultureInfo value)
   場所 Sample.Main()
.NET Framework 4以降での実行結果
CultureInfo.CurrentCulture: en-US
CultureInfo.CurrentCulture: en

§1.3 カルチャと書式・テキスト処理

いくつかのクラスやメソッドでは、カルチャよって異なる結果を返すものがあります。 一つの例として、DateTime.ToStringメソッドは、書式を指定しなかった場合は現在のカルチャに設定されている書式に従って文字列化します。

using System;
using System.Globalization;
using System.Threading;

class Sample {
  static void Main()
  {
    DateTime dateTime = new DateTime(2000, 1, 23, 4, 5, 6);

    // デフォルトのカルチャ(ja-JP)で日時を文字列化
    Console.WriteLine("{0}: {1}", CultureInfo.CurrentCulture, dateTime.ToString());

    // en-US(英語/アメリカ合衆国)のカルチャで日時を文字列化
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

    Console.WriteLine("{0}: {1}", CultureInfo.CurrentCulture, dateTime.ToString());

    // de-DE(ドイツ語/ドイツ)のカルチャで日時を文字列化
    Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");

    Console.WriteLine("{0}: {1}", CultureInfo.CurrentCulture, dateTime.ToString());
  }
}
実行結果
ja-JP: 2000/01/23 4:05:06
en-US: 1/23/2000 4:05:06 AM
de-DE: 23.01.2000 04:05:06

カルチャによって結果が異なる例は他にもあります。 例えば、文字列の比較や大文字小文字の変換など、特に文字列からの/への変換では現在のカルチャに依存した結果を返すものが多く存在します。 この点についてはカルチャと書式・テキスト処理・暦で詳しく解説します。

カルチャによって結果が変わることが問題となる場合は、明示的に書式やカルチャを指定するか、インバリアントカルチャ(後述)を使用することが出来ます。 カルチャを考慮した文字列操作については、文字列と比較オプション・カルチャの並べ替え規則でも詳しく解説しているのでご覧ください。

スレッドのカルチャを変更せず、一時的に特定のカルチャでの書式に基づいた文字列化を行いたい場合には、ToStringメソッドの引数にCultureInfoを指定することでそのカルチャに応じた書式での文字列化を行うことができます。 このとき書式指定子を同時に指定すれば、対応するカルチャにローカライズされた書式が用いられます。

特定のカルチャでの書式で文字列化する
using System;
using System.Globalization;
using System.Threading;

class Sample {
  static void Main()
  {
    DateTime dateTime = new DateTime(2000, 1, 23, 4, 5, 6);

    // 現在のカルチャ(ja-JP)で日時を文字列化
    Console.WriteLine(dateTime.ToString());

    // en-US(英語/アメリカ合衆国)のカルチャの書式で日時を文字列化
    Console.WriteLine(dateTime.ToString(new CultureInfo("en-US")));

    // de-DE(ドイツ語/ドイツ)のカルチャの書式で日時を文字列化
    Console.WriteLine(dateTime.ToString(new CultureInfo("de-DE")));

    // de-DE(ドイツ語/ドイツ)のカルチャの書式(F:完全な日付と日時)で日時を文字列化
    Console.WriteLine(dateTime.ToString("F", new CultureInfo("de-DE")));
  }
}
実行結果
2000/01/23 4:05:06
1/23/2000 4:05:06 AM
23.01.2000 04:05:06
Sonntag, 23. Januar 2000 04:05:06

この例におけるCultureInfoは書式プロバイダとして用いられます。 書式プロバイダについて詳しくはカルチャと書式・テキスト処理・暦で解説しています。 書式指定子の種類、およびローカライズされる/されない書式指定子については書式指定子で解説しています。



§1.4 インバリアントカルチャ

前述したとおり、CultureInfoには特定の言語や国・地域で用いられる書式や文字列比較の規則などが設定されていますが、それとは別にインバリアントカルチャと呼ばれる特定の言語や国・地域に依存しない特別なカルチャが用意されています。 インバリアントカルチャには英語圏で使われるものを基本とする書式・規則が設定されていて、特定のカルチャに依存しない形式への変換や比較を行いたい場合に使用します。 CultureInfo.InvariantCultureプロパティを参照することでインバリアントカルチャを表すCultureInfoを取得することが出来ます。


インバリアントカルチャが有効に機能する一つの例を見てみます。 StreamWriterを使ってDouble型のデータをファイルに保存することを考えます。

StreamWriterを使ってDouble型の値をファイルに保存する
using System;
using System.IO;
using System.Threading;

class Sample {
  static void Main()
  {
    Console.WriteLine("CurrentCulture: {0}", Thread.CurrentThread.CurrentCulture);

    double number = 1234.5678;

    using (StreamWriter writer = new StreamWriter("config.txt")) {
      writer.WriteLine(number);
    }
  }
}

上記のコードをja-JP(日本語/日本)の環境で実行すると、次のような内容が書き込まれるはずです。

config.txt
1234.5678

次に、このファイルを読み込んでみます。

StreamReaderを使ってDouble型の値をファイルから読み込む
using System;
using System.IO;
using System.Threading;

class Sample {
  static void Main()
  {
    // Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("fr-FR");

    Console.WriteLine("CurrentCulture: {0}", Thread.CurrentThread.CurrentCulture);

    double number;

    using (StreamReader reader = new StreamReader("config.txt")) {
      number = double.Parse(reader.ReadLine());
    }

    Console.WriteLine("loaded value : {0}", number);
  }
}

このコードをfr-FR(フランス語/フランス)の環境で実行するか、コメントアウトしてある部分を有効にして実行すると次のように例外がスローされます。

実行結果
CurrentCulture: fr-FR

ハンドルされていない例外: System.FormatException: 入力文字列の形式が正しくありません。
   場所 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   場所 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
   場所 System.Double.Parse(String s, NumberStyles style, NumberFormatInfo info)
   場所 Sample.Main()

これは、fr-FRの環境では小数点区切りに . (ピリオド)ではなく , (カンマ)が用いられることが理由で、これにより文字列"1234.5678"はDouble型の値としては不正な形式とみなされるためです。 (fr-FRの環境では実数値に"1234,5678"という表記が用いられる)


もちろん、保存と読み込みを同じカルチャで実行すれば問題とはなりません。 しかし、複数の異なるカルチャ間でやりとりするようなデータを保存・読み込みするコードなど、異なるカルチャで実行した場合に結果が変わることが問題となる場合には、インバリアントカルチャを使うことでこのような問題が発生することを避けることが出来ます。

次のコードは、先のコードをインバリアントカルチャを使って保存・読み込みするように書き換えたものです。 この例では、インバリアントカルチャを書式プロバイダとして使用しています。 (書式プロバイダについてはカルチャと書式・テキスト処理・暦で詳しく解説しています)

インバリアントカルチャを用いた保存用のコード
using System;
using System.Globalization;
using System.IO;
using System.Threading;

class Sample {
  static void Main()
  {
    Console.WriteLine("CurrentCulture: {0}", Thread.CurrentThread.CurrentCulture);

    double number = 1234.5678;

    using (StreamWriter writer = new StreamWriter("config.txt")) {
      writer.WriteLine(number.ToString(CultureInfo.InvariantCulture));
    }
  }
}
インバリアントカルチャを用いた読み込み用のコード
using System;
using System.Globalization;
using System.IO;
using System.Threading;

class Sample {
  static void Main()
  {
    Console.WriteLine("CurrentCulture: {0}", Thread.CurrentThread.CurrentCulture);

    double number;

    using (StreamReader reader = new StreamReader("config.txt")) {
      number = double.Parse(reader.ReadLine(), CultureInfo.InvariantCulture);
    }

    Console.WriteLine("loaded value : {0}", number);
  }
}

このように、特定のカルチャに依存した動作となることを避けたい場合には、その代替としてインバリアントカルチャを用います。

なお、文字列関連のクラスではString.ToLowerInvariantなどのメソッドや、StringComparisonを指定することができるメソッドでStringComparison.InvariantCultureを指定することによってもインバリアントカルチャの規則を使った処理を行うことができるようになっています。

§1.5 ニュートラルカルチャ

ニュートラルカルチャとは、国や地域に依存せず、言語のみに依存するカルチャです。 例えば、"en-US"(英語-米国)や"en-GB"(英語-英国)のカルチャは言語と地域を表しますが、対してニュートラルカルチャ"en"(英語)は言語のみを表します。

.NET Framework 3.5以前では、ニュートラルカルチャから言語に対応する情報を取得することはできますが、国や地域に対応する情報を取得することはできません。 従って、ニュートラルカルチャの場合は、DateTimeFormatやNumberFormatなどの書式を取得したり、書式プロバイダ(詳細:カルチャと書式・テキスト処理・暦)として使用することは出来ません。 また、既に解説したとおり、Thread.CurrentUICultureにはニュートラルカルチャを指定することが出来ますが、書式情報を取得することが出来ないニュートラルカルチャをThread.CurrentCultureに指定することは出来ません。 このような操作を行おうとした場合、NotSupportedExceptionがスローされます。

.NET Framework 4以降では、ニュートラルカルチャに特定のカルチャが関連付けられるようになったためこのような制限は無くなり、書式を取得したり書式プロバイダとして使用することや、Thread.CurrentCultureにニュートラルカルチャを設定することが出来るようになっています。

なお、ニュートラルカルチャを取得するには"ja"や"en"などの言語コードのみを指定します。 CultureInfoがニュートラルカルチャかどうか調べるには、IsNeutralCultureプロパティを参照します。

§1.6 初期状態でのスレッドのカルチャ

実行時の初期状態では、スレッドのカルチャにはシステムで設定されているものと同じカルチャが設定されます。

Windowsでは、コントロールパネルにおける地域と言語の設定に対応するカルチャが設定されます。 この設定を変更すると、以降に起動するプロセスにおけるカルチャの初期値に影響します。

Linux等では、環境変数LANGに設定されている値に対応するカルチャが設定されます。 環境変数LANGを変更すると、以降に起動するプロセスにおけるカルチャの初期値に影響します。

実行時の初期状態におけるスレッドのカルチャ
using System;
using System.Globalization;

class Sample {
  static void Main()
  {
    // 実行時の初期状態におけるスレッドのカルチャを表示する
    Console.WriteLine("CurrentCulture: {0}", CultureInfo.CurrentCulture);
    Console.WriteLine("CurrentUICulture: {0}", CultureInfo.CurrentUICulture);
  }
}
実行結果例(Ubuntu 14.04 + Mono)
$ env | grep LANG=
LANG=ja_JP.UTF-8
$ mono test.exe
CurrentCulture: ja-JP
CurrentUICulture: ja-JP

$ LANG=en-US
$ env | grep LANG=
LANG=en-US
$ mono test.exe
CurrentCulture: en-US
CurrentUICulture: en-US

§1.6.1 新しく起動したスレッドのカルチャ

新しくスレッドを起動した場合、そのスレッドのカルチャにはシステムに設定されているカルチャが設定されます。 現在のスレッドのカルチャは生成されたスレッドには引き継がれない点に注意が必要です。

新しく起動したスレッドには現在のスレッドのカルチャは引き継がれない
using System;
using System.Globalization;
using System.Threading;

class Sample {
  static void Main()
  {
    // 現在のスレッドのカルチャを変更
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

    // 現在のスレッドのカルチャを表示
    Console.WriteLine("CurrentCulture: {0}", CultureInfo.CurrentCulture);

    // 新しいスレッドを作成して起動する
    var t = new Thread(NewThread);

    t.Start();
    t.Join();
  }

  static void NewThread()
  {
    // 開始されたスレッドでのカルチャを表示
    Console.WriteLine("CurrentCulture (new thread): {0}", CultureInfo.CurrentCulture);
  }
}
実行結果
CurrentCulture: en-US
CurrentCulture (new thread): ja-JP

この動作は、ThreadPoolクラスで起動したスレッドプールや、Taskクラスで起動したタスクの場合でも同様です。

新しく起動したタスクには現在のスレッドのカルチャは引き継がれない
using System;
using System.Globalization;
using System.Threading;
using System.Threading.Tasks;

class Sample {
  static void Main()
  {
    // 現在のスレッドのカルチャを変更
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

    // 現在のスレッドのカルチャを表示
    Console.WriteLine("CurrentCulture: {0}", CultureInfo.CurrentCulture);

    // 新しいタスクを作成して起動する
    var t = Task.Factory.StartNew(NewTask);

    t.Wait();
  }

  static void NewTask()
  {
    // 開始されたタスクでのカルチャを表示
    Console.WriteLine("CurrentCulture (new task): {0}", CultureInfo.CurrentCulture);
  }
}
実行結果
CurrentCulture: en-US
CurrentCulture (new task): ja-JP

スレッドを起動する際に同じカルチャで動作させたい場合は、次のようにCurrentCultureプロパティ(およびCurrentUICultureプロパティ)を明示的に設定してから起動する必要があります。

新しく作成したスレッドのカルチャを変更してから起動する
using System;
using System.Globalization;
using System.Threading;

class Sample {
  static void Main()
  {
    // 現在のスレッドのカルチャを変更
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

    // 現在のスレッドのカルチャを表示
    Console.WriteLine("CurrentCulture: {0}", CultureInfo.CurrentCulture);

    // 新しいスレッドを作成する
    var t = new Thread(NewThread);

    // 現在のスレッドと同じカルチャを設定してから起動する
    t.CurrentCulture = Thread.CurrentThread.CurrentCulture;

    t.Start();
    t.Join();
  }

  static void NewThread()
  {
    // 開始されたスレッドでのカルチャを表示
    Console.WriteLine("CurrentCulture (new thread): {0}", CultureInfo.CurrentCulture);
  }
}
実行結果
CurrentCulture: en-US
CurrentCulture (new thread): en-US

§2 カルチャ情報の取得 (CultureInfo)

§2.1 カルチャに固有な情報の取得

CultureInfoクラスのプロパティを参照することで、カルチャに固有な情報を取得することが出来ます。 ロケールの固有なIDであるLCIDを始め、ISO 639-2形式の言語コードISOを取得するTwoLetterISOLanguageNameThreeLetterISOLanguageNameなどのプロパティがあります。

カルチャの名称は、カルチャの言語コード+国・地域コードの形式で取得するName、英語表記で取得するEnglishName、カルチャが表す言語で取得するNativeName、ローカライズされた(システムの)言語で取得するDisplayNameなどのプロパティを使って取得出来ます。

その他、カルチャに固有な書式や変換・比較の規則は以下のプロパティで取得することが出来ます。 これらのプロパティについてはカルチャと書式・テキスト処理・暦で詳しく解説します。

以下は、CultureInfoで取得できる情報のいくつかを表示したものです。

CultureInfoで取得できる情報の例
|LCID  |Name    |EnglishName                             |ISO2 |ISO3 |DisplayName                   |NativeName
------------------------------------------------------------------------------------------------------------------------
|1041  |ja-JP   |Japanese (Japan)                        |ja   |jpn  |日本語 (日本)                      |日本語 (日本)
|1033  |en-US   |English (United States)                 |en   |eng  |英語 (米国)                       |English (United States)
|2057  |en-GB   |English (United Kingdom)                |en   |eng  |英語 (英国)                       |English (United Kingdom)
|1031  |de-DE   |German (Germany)                        |de   |deu  |ドイツ語 (ドイツ)                    |Deutsch (Deutschland)
|3082  |es-ES   |Spanish (Spain)                         |es   |spa  |スペイン語 (スペイン)                  |español (España)
|1036  |fr-FR   |French (France)                         |fr   |fra  |フランス語 (フランス)                  |français (France)
|1028  |zh-TW   |Chinese (Taiwan)                        |zh   |zho  |中国語 (台湾)                      |中文(台灣)
|2052  |zh-CN   |Chinese (People's Republic of China)    |zh   |zho  |中国語 (中華人民共和国)                 |中文(中华人民共和国)
|14337 |ar-AE   |Arabic (U.A.E.)                         |ar   |ara  |アラビア語 (アラブ首長国連邦)              |العربية (الإمارات العربية المتحدة)

|EnglishName                             |Calendar                      |ANSICodePage          |LongDatePattern               |CurrencySymbol
--------------------------------------------------------------------------------------------------------------------------------------------
|Japanese (Japan)                        |GregorianCalendar             |932    (shift_jis    )|yyyy'年'M'月'd'日'               |¥
|English (United States)                 |GregorianCalendar             |1252   (Windows-1252 )|dddd, MMMM dd, yyyy           |$
|English (United Kingdom)                |GregorianCalendar             |1252   (Windows-1252 )|dd MMMM yyyy                  |£
|German (Germany)                        |GregorianCalendar             |1252   (Windows-1252 )|dddd, d. MMMM yyyy            |€
|Spanish (Spain)                         |GregorianCalendar             |1252   (Windows-1252 )|dddd, dd' de 'MMMM' de 'yyyy  |€
|French (France)                         |GregorianCalendar             |1252   (Windows-1252 )|dddd d MMMM yyyy              |€
|Chinese (Taiwan)                        |GregorianCalendar             |950    (big5         )|yyyy'年'M'月'd'日'               |NT$
|Chinese (People's Republic of China)    |GregorianCalendar             |936    (gb2312       )|yyyy'年'M'月'd'日'               |¥
|Arabic (U.A.E.)                         |GregorianCalendar             |1256   (windows-1256 )|dd MMMM, yyyy                 |د.إ.‏
上記結果を取得するために使ったコード
using System;
using System.Globalization;
using System.Text;

class Sample {
  static void Main()
  {
    Console.OutputEncoding = Encoding.UTF8;

    CultureInfo[] cultures = new CultureInfo[] {
      new CultureInfo("ja-JP"),
      new CultureInfo("en-US"),
      new CultureInfo("en-GB"),
      new CultureInfo("de-DE"),
      new CultureInfo("es-ES"),
      new CultureInfo("fr-FR"),
      new CultureInfo("zh-TW"),
      new CultureInfo("zh-CN"),
      new CultureInfo("ar-AE"),
    };

    Console.WriteLine("|{0,-6}|{1,-8}|{2,-40}|{3,-5}|{4,-5}|{5,-30}|{6}",
                      "LCID",
                      "Name",
                      "EnglishName",
                      "ISO2",
                      "ISO3",
                      "DisplayName",
                      "NativeName");

    Console.WriteLine(new string('-', 120));

    foreach (CultureInfo c in cultures) {
      Console.WriteLine("|{0,-6:D}|{1,-8}|{2,-40}|{3,-5}|{4,-5}|{5,-30}|{6}",
                        c.LCID,
                        c.Name,
                        c.EnglishName,
                        c.TwoLetterISOLanguageName,
                        c.ThreeLetterISOLanguageName,
                        c.DisplayName,
                        c.NativeName);
    }

    Console.WriteLine();

    Console.WriteLine("|{0,-40}|{1,-30}|{2,-22}|{3,-30}|{4}",
                      "EnglishName",
                      "Calendar",
                      "ANSICodePage",
                      "LongDatePattern",
                      "CurrencySymbol");

    Console.WriteLine(new string('-', 140));

    foreach (CultureInfo c in cultures) {
      Console.WriteLine("|{0,-40}|{1,-30}|{2,-6} ({3,-13})|{4,-30}|{5}",
                        c.EnglishName,
                        c.Calendar.GetType().Name,
                        c.TextInfo.ANSICodePage,
                        Encoding.GetEncoding(c.TextInfo.ANSICodePage).WebName,
                        c.DateTimeFormat.LongDatePattern,
                        c.NumberFormat.CurrencySymbol);
    }
  }
}

§2.2 言語と国・地域を指定したカルチャの取得

コンストラクタでカルチャの名前やIDを指定することで、それに該当するカルチャのCultureInfoを作成することが出来ます。 CreateSpecificCultureメソッドも同様に名前を使ってCultureInfoを作成することが出来ます。 このようにして作成したCultureInfoは、DateTimeFormatやNumberFormatを変更して書式などをカスタマイズすることが出来ます。

一方、GetCultureInfoメソッドも同様に名前やIDを使ってCultureInfoを取得することが出来ますが、このメソッドは読み取り専用のインスタンスを返すため、変更する事は出来ません。 また、キャッシュされた情報を元に作成するため、コンストラクタを使う場合よりもパフォーマンスに優れています。

以下の例では、いくつかのカルチャとニュートラルカルチャを取得し、プロパティの内容を表示しています。 また、ニュートラルカルチャでない場合は、カルチャ固有の書式を使ってDateTimeとDecimalの値を書式化しています。

using System;
using System.Globalization;
using System.Text;

class Sample {
  static void Main()
  {
    Console.OutputEncoding = Encoding.UTF8;

    string[] codes = new string[] {
      "en", "en-US", "en-GB", "en-AU",
      "de", "de-DE", "de-AT", "de-CH",
      "ja", "ja-JP",
      "zh-Hans", "zh-Hant", "zh-TW", "zh-CN", "zh-HK",
    };

    DateTime dateTime = new DateTime(2000, 1, 23, 4, 5, 6, DateTimeKind.Utc);
    decimal number = 1234.5678m;

    Console.WriteLine("|{0,-6}|{1,-8}|{2,-40}|{3,-8}|{4,-40}|{5}",
                      "LCID",
                      "Name",
                      "EnglishName",
                      "neutral",
                      "DateTime",
                      "Currency");

    Console.WriteLine(new string('-', 120));

    foreach (string code in codes) {
      CultureInfo c = CultureInfo.GetCultureInfo(code);

      Console.WriteLine("|{0,-6:D}|{1,-8}|{2,-40}|{3,-8}|{4,-40}|{5}",
                        c.LCID,
                        c.Name,
                        c.EnglishName,
                        c.IsNeutralCulture,
                        c.IsNeutralCulture ? string.Empty : dateTime.ToString("U", c),
                        c.IsNeutralCulture ? string.Empty : number.ToString("C", c));
    }
  }
}
実行結果
|LCID  |Name    |EnglishName                             |neutral |DateTime                                |Currency
------------------------------------------------------------------------------------------------------------------------
|9     |en      |English                                 |True    |                                        |
|1033  |en-US   |English (United States)                 |False   |Sunday, January 23, 2000 4:05:06 AM     |$1,234.57
|2057  |en-GB   |English (United Kingdom)                |False   |23 January 2000 04:05:06                |£1,234.57
|3081  |en-AU   |English (Australia)                     |False   |Sunday, 23 January 2000 4:05:06 AM      |$1,234.57
|7     |de      |German                                  |True    |                                        |
|1031  |de-DE   |German (Germany)                        |False   |Sonntag, 23. Januar 2000 04:05:06       |1.234,57 €
|3079  |de-AT   |German (Austria)                        |False   |Sonntag, 23. Jänner 2000 04:05:06       |€ 1.234,57
|2055  |de-CH   |German (Switzerland)                    |False   |Sonntag, 23. Januar 2000 04:05:06       |SFr. 1'234.57
|17    |ja      |Japanese                                |True    |                                        |
|1041  |ja-JP   |Japanese (Japan)                        |False   |2000年1月23日 4:05:06                      |¥1,235
|4     |zh-Hans |Chinese (Simplified)                    |True    |                                        |
|31748 |zh-Hant |Chinese (Traditional)                   |True    |                                        |
|1028  |zh-TW   |Chinese (Taiwan)                        |False   |2000年1月23日 上午 04:05:06                  |NT$1,234.57
|2052  |zh-CN   |Chinese (People's Republic of China)    |False   |2000年1月23日 4:05:06                      |¥1,234.57
|3076  |zh-HK   |Chinese (Hong Kong S.A.R.)              |False   |Sunday, 23 January, 2000 4:05:06        |HK$1,234.57

§2.3 種類を指定したカルチャの取得

GetCulturesメソッドを使うと、サポートされているカルチャを取得することが出来ます。 取得の際に、CultureTypes列挙型で取得するカルチャの種類を指定することが出来ます。 種類には以下の値を組み合わせて指定出来ます。

CultureTypes列挙型で指定できる主なカルチャの種類
取得する種類
NeutralCultures 国・地域に固有でない(ニュートラルな)カルチャ。 インバリアントカルチャも含みます。
SpecificCultures 国・地域に固有なカルチャ。
UserCustomCulture ユーザが作成したカルチャ。
InstalledWin32Cultures インストールされているすべてのカルチャ。
(.NET Frameworkでサポートされるカルチャのうち、システムにインストールされていないものは使用出来ません)
AllCultures 上記のすべてのカルチャ。

以下はGetCulturesメソッドを使ってニュートラルカルチャと国・地域に固有なカルチャを取得し、一覧で表示する例です。

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;

class Sample {
  static void Main()
  {
    Console.OutputEncoding = Encoding.UTF8;

    Console.WriteLine(Environment.Version);
    Console.WriteLine(Environment.OSVersion);

    List<CultureInfo> cultures = new List<CultureInfo>();

    // CultureTypes.SpecificCulturesとCultureTypes.NeutralCulturesに該当するカルチャを取得
    cultures.AddRange(CultureInfo.GetCultures(CultureTypes.SpecificCultures | CultureTypes.NeutralCultures));

    // CultureInfo.Nameでソート
    cultures.Sort(delegate(CultureInfo x, CultureInfo y) {
      return StringComparer.Ordinal.Compare(x.Name, y.Name);
    });

    Console.WriteLine("|{0,-6}|{1,-10}|{2,-8}|{3,-45}|{4}",
                      "LCID",
                      "Name",
                      "neutral",
                      "EnglishName",
                      "NativeName");

    Console.WriteLine(new string('-', 120));

    foreach (CultureInfo c in cultures) {
      Console.WriteLine("|{0,-6:D}|{1,-10}|{2,-8}|{3,-45}|{4}",
                        c.LCID,
                        c.Name,
                        c.IsNeutralCulture ? "neutral" : string.Empty,
                        c.EnglishName,
                        c.NativeName);
    }
  }
}
実行結果
4.0.30319.1
Microsoft Windows NT 5.1.2600 Service Pack 3
|LCID  |Name      |neutral |EnglishName                                  |NativeName
------------------------------------------------------------------------------------------------------------------------
|127   |          |        |Invariant Language (Invariant Country)       |Invariant Language (Invariant Country)
|54    |af        |neutral |Afrikaans                                    |Afrikaans
|1078  |af-ZA     |        |Afrikaans (South Africa)                     |Afrikaans (Suid Afrika)
|94    |am        |neutral |Amharic                                      |አማርኛ
|1118  |am-ET     |        |Amharic (Ethiopia)                           |አማርኛ (ኢትዮጵያ)
|1     |ar        |neutral |Arabic                                       |العربية
|14337 |ar-AE     |        |Arabic (U.A.E.)                              |العربية (الإمارات العربية المتحدة)
|15361 |ar-BH     |        |Arabic (Bahrain)                             |العربية (البحرين)
|5121  |ar-DZ     |        |Arabic (Algeria)                             |العربية (الجزائر)
|3073  |ar-EG     |        |Arabic (Egypt)                               |العربية (مصر)
|2049  |ar-IQ     |        |Arabic (Iraq)                                |العربية (العراق)
|11265 |ar-JO     |        |Arabic (Jordan)                              |العربية (الأردن)
|13313 |ar-KW     |        |Arabic (Kuwait)                              |العربية (الكويت)
|12289 |ar-LB     |        |Arabic (Lebanon)                             |العربية (لبنان)
|4097  |ar-LY     |        |Arabic (Libya)                               |العربية (ليبيا)
|6145  |ar-MA     |        |Arabic (Morocco)                             |العربية (المملكة المغربية)
|8193  |ar-OM     |        |Arabic (Oman)                                |العربية (عمان)
|16385 |ar-QA     |        |Arabic (Qatar)                               |العربية (قطر)
|1025  |ar-SA     |        |Arabic (Saudi Arabia)                        |العربية (المملكة العربية السعودية)
|10241 |ar-SY     |        |Arabic (Syria)                               |العربية (سوريا)
|7169  |ar-TN     |        |Arabic (Tunisia)                             |العربية (تونس)
|9217  |ar-YE     |        |Arabic (Yemen)                               |العربية (اليمن)
|122   |arn       |neutral |Mapudungun                                   |Mapudungun
|1146  |arn-CL    |        |Mapudungun (Chile)                           |Mapudungun (Chile)
|77    |as        |neutral |Assamese                                     |অসমীয়া
|1101  |as-IN     |        |Assamese (India)                             |অসমীয়া (ভাৰত)
|44    |az        |neutral |Azeri                                        |Azərbaycan­ılı
|29740 |az-Cyrl   |neutral |Azeri (Cyrillic)                             |Азәрбајҹан дили
|2092  |az-Cyrl-AZ|        |Azeri (Cyrillic, Azerbaijan)                 |Азәрбајҹан (Азәрбајҹан)
|30764 |az-Latn   |neutral |Azeri (Latin)                                |Azərbaycan­ılı
|1068  |az-Latn-AZ|        |Azeri (Latin, Azerbaijan)                    |Azərbaycan­ılı (Azərbaycan)
|109   |ba        |neutral |Bashkir                                      |Башҡорт
|1133  |ba-RU     |        |Bashkir (Russia)                             |Башҡорт (Россия)
|35    |be        |neutral |Belarusian                                   |Беларускі
|1059  |be-BY     |        |Belarusian (Belarus)                         |Беларускі (Беларусь)
|2     |bg        |neutral |Bulgarian                                    |български
|1026  |bg-BG     |        |Bulgarian (Bulgaria)                         |български (България)
|69    |bn        |neutral |Bengali                                      |বাংলা
|2117  |bn-BD     |        |Bengali (Bangladesh)                         |বাংলা (বাংলাদেশ)
|1093  |bn-IN     |        |Bengali (India)                              |বাংলা (ভারত)
|81    |bo        |neutral |Tibetan                                      |བོད་ཡིག
|1105  |bo-CN     |        |Tibetan (PRC)                                |བོད་ཡིག (ཀྲུང་ཧྭ་མི་དམངས་སྤྱི་མཐུན་རྒྱལ་ཁབ།)
|126   |br        |neutral |Breton                                       |brezhoneg
|1150  |br-FR     |        |Breton (France)                              |brezhoneg (Frañs)
|30746 |bs        |neutral |Bosnian                                      |bosanski
|25626 |bs-Cyrl   |neutral |Bosnian (Cyrillic)                           |босански
|8218  |bs-Cyrl-BA|        |Bosnian (Cyrillic, Bosnia and Herzegovina)   |босански (Босна и Херцеговина)
|26650 |bs-Latn   |neutral |Bosnian (Latin)                              |bosanski
|5146  |bs-Latn-BA|        |Bosnian (Latin, Bosnia and Herzegovina)      |bosanski (Bosna i Hercegovina)
|3     |ca        |neutral |Catalan                                      |català
|1027  |ca-ES     |        |Catalan (Catalan)                            |català (català)
|131   |co        |neutral |Corsican                                     |Corsu
|1155  |co-FR     |        |Corsican (France)                            |Corsu (France)
|5     |cs        |neutral |Czech                                        |čeština
|1029  |cs-CZ     |        |Czech (Czech Republic)                       |čeština (Česká republika)
|82    |cy        |neutral |Welsh                                        |Cymraeg
|1106  |cy-GB     |        |Welsh (United Kingdom)                       |Cymraeg (y Deyrnas Unedig)
|6     |da        |neutral |Danish                                       |dansk
|1030  |da-DK     |        |Danish (Denmark)                             |dansk (Danmark)
|7     |de        |neutral |German                                       |Deutsch
|3079  |de-AT     |        |German (Austria)                             |Deutsch (Österreich)
|2055  |de-CH     |        |German (Switzerland)                         |Deutsch (Schweiz)
|1031  |de-DE     |        |German (Germany)                             |Deutsch (Deutschland)
|5127  |de-LI     |        |German (Liechtenstein)                       |Deutsch (Liechtenstein)
|4103  |de-LU     |        |German (Luxembourg)                          |Deutsch (Luxemburg)
|31790 |dsb       |neutral |Lower Sorbian                                |dolnoserbšćina
|2094  |dsb-DE    |        |Lower Sorbian (Germany)                      |dolnoserbšćina (Nimska)
|101   |dv        |neutral |Divehi                                       |ދިވެހިބަސް
|1125  |dv-MV     |        |Divehi (Maldives)                            |ދިވެހިބަސް (ދިވެހި ރާއްޖެ)
|8     |el        |neutral |Greek                                        |Ελληνικά
|1032  |el-GR     |        |Greek (Greece)                               |Ελληνικά (Ελλάδα)
|9     |en        |neutral |English                                      |English
|9225  |en-029    |        |English (Caribbean)                          |English (Caribbean)
|3081  |en-AU     |        |English (Australia)                          |English (Australia)
|10249 |en-BZ     |        |English (Belize)                             |English (Belize)
|4105  |en-CA     |        |English (Canada)                             |English (Canada)
|2057  |en-GB     |        |English (United Kingdom)                     |English (United Kingdom)
|6153  |en-IE     |        |English (Ireland)                            |English (Ireland)
|16393 |en-IN     |        |English (India)                              |English (India)
|8201  |en-JM     |        |English (Jamaica)                            |English (Jamaica)
|17417 |en-MY     |        |English (Malaysia)                           |English (Malaysia)
|5129  |en-NZ     |        |English (New Zealand)                        |English (New Zealand)
|13321 |en-PH     |        |English (Republic of the Philippines)        |English (Philippines)
|18441 |en-SG     |        |English (Singapore)                          |English (Singapore)
|11273 |en-TT     |        |English (Trinidad and Tobago)                |English (Trinidad y Tobago)
|1033  |en-US     |        |English (United States)                      |English (United States)
|7177  |en-ZA     |        |English (South Africa)                       |English (South Africa)
|12297 |en-ZW     |        |English (Zimbabwe)                           |English (Zimbabwe)
|10    |es        |neutral |Spanish                                      |español
|11274 |es-AR     |        |Spanish (Argentina)                          |Español (Argentina)
|16394 |es-BO     |        |Spanish (Bolivia)                            |Español (Bolivia)
|13322 |es-CL     |        |Spanish (Chile)                              |Español (Chile)
|9226  |es-CO     |        |Spanish (Colombia)                           |Español (Colombia)
|5130  |es-CR     |        |Spanish (Costa Rica)                         |Español (Costa Rica)
|7178  |es-DO     |        |Spanish (Dominican Republic)                 |Español (República Dominicana)
|12298 |es-EC     |        |Spanish (Ecuador)                            |Español (Ecuador)
|3082  |es-ES     |        |Spanish (Spain, International Sort)          |Español (España, alfabetización internacional)
|4106  |es-GT     |        |Spanish (Guatemala)                          |Español (Guatemala)
|18442 |es-HN     |        |Spanish (Honduras)                           |Español (Honduras)
|2058  |es-MX     |        |Spanish (Mexico)                             |Español (México)
|19466 |es-NI     |        |Spanish (Nicaragua)                          |Español (Nicaragua)
|6154  |es-PA     |        |Spanish (Panama)                             |Español (Panamá)
|10250 |es-PE     |        |Spanish (Peru)                               |Español (Perú)
|20490 |es-PR     |        |Spanish (Puerto Rico)                        |Español (Puerto Rico)
|15370 |es-PY     |        |Spanish (Paraguay)                           |Español (Paraguay)
|17418 |es-SV     |        |Spanish (El Salvador)                        |Español (El Salvador)
|21514 |es-US     |        |Spanish (United States)                      |Español (Estados Unidos)
|14346 |es-UY     |        |Spanish (Uruguay)                            |Español (Uruguay)
|8202  |es-VE     |        |Spanish (Bolivarian Republic of Venezuela)   |Español (Republica Bolivariana de Venezuela)
|37    |et        |neutral |Estonian                                     |eesti
|1061  |et-EE     |        |Estonian (Estonia)                           |eesti (Eesti)
|45    |eu        |neutral |Basque                                       |euskara
|1069  |eu-ES     |        |Basque (Basque)                              |euskara (euskara)
|41    |fa        |neutral |Persian                                      |فارسى
|1065  |fa-IR     |        |Persian                                      |فارسى (ایران)
|11    |fi        |neutral |Finnish                                      |suomi
|1035  |fi-FI     |        |Finnish (Finland)                            |suomi (Suomi)
|100   |fil       |neutral |Filipino                                     |Filipino
|1124  |fil-PH    |        |Filipino (Philippines)                       |Filipino (Pilipinas)
|56    |fo        |neutral |Faroese                                      |føroyskt
|1080  |fo-FO     |        |Faroese (Faroe Islands)                      |føroyskt (Føroyar)
|12    |fr        |neutral |French                                       |français
|2060  |fr-BE     |        |French (Belgium)                             |français (Belgique)
|3084  |fr-CA     |        |French (Canada)                              |français (Canada)
|4108  |fr-CH     |        |French (Switzerland)                         |français (Suisse)
|1036  |fr-FR     |        |French (France)                              |français (France)
|5132  |fr-LU     |        |French (Luxembourg)                          |français (Luxembourg)
|6156  |fr-MC     |        |French (Monaco)                              |français (Principauté de Monaco)
|98    |fy        |neutral |Frisian                                      |Frysk
|1122  |fy-NL     |        |Frisian (Netherlands)                        |Frysk (Nederlân)
|60    |ga        |neutral |Irish                                        |Gaeilge
|2108  |ga-IE     |        |Irish (Ireland)                              |Gaeilge (Éire)
|145   |gd        |neutral |Scottish Gaelic                              |Gàidhlig
|1169  |gd-GB     |        |Scottish Gaelic (United Kingdom)             |Gàidhlig (An Rìoghachd Aonaichte)
|86    |gl        |neutral |Galician                                     |galego
|1110  |gl-ES     |        |Galician (Galician)                          |galego (galego)
|132   |gsw       |neutral |Alsatian                                     |Elsässisch
|1156  |gsw-FR    |        |Alsatian (France)                            |Elsässisch (Frànkrisch)
|71    |gu        |neutral |Gujarati                                     |ગુજરાતી
|1095  |gu-IN     |        |Gujarati (India)                             |ગુજરાતી (ભારત)
|104   |ha        |neutral |Hausa                                        |Hausa
|31848 |ha-Latn   |neutral |Hausa (Latin)                                |Hausa
|1128  |ha-Latn-NG|        |Hausa (Latin, Nigeria)                       |Hausa (Nigeria)
|13    |he        |neutral |Hebrew                                       |עברית
|1037  |he-IL     |        |Hebrew (Israel)                              |עברית (ישראל)
|57    |hi        |neutral |Hindi                                        |हिंदी
|1081  |hi-IN     |        |Hindi (India)                                |हिंदी (भारत)
|26    |hr        |neutral |Croatian                                     |hrvatski
|4122  |hr-BA     |        |Croatian (Latin, Bosnia and Herzegovina)     |hrvatski (Bosna i Hercegovina)
|1050  |hr-HR     |        |Croatian (Croatia)                           |hrvatski (Hrvatska)
|46    |hsb       |neutral |Upper Sorbian                                |hornjoserbšćina
|1070  |hsb-DE    |        |Upper Sorbian (Germany)                      |hornjoserbšćina (Němska)
|14    |hu        |neutral |Hungarian                                    |magyar
|1038  |hu-HU     |        |Hungarian (Hungary)                          |magyar (Magyarország)
|43    |hy        |neutral |Armenian                                     |Հայերեն
|1067  |hy-AM     |        |Armenian (Armenia)                           |Հայերեն (Հայաստան)
|33    |id        |neutral |Indonesian                                   |Bahasa Indonesia
|1057  |id-ID     |        |Indonesian (Indonesia)                       |Bahasa Indonesia (Indonesia)
|112   |ig        |neutral |Igbo                                         |Igbo
|1136  |ig-NG     |        |Igbo (Nigeria)                               |Igbo (Nigeria)
|120   |ii        |neutral |Yi                                           |ꆈꌠꁱꂷ
|1144  |ii-CN     |        |Yi (PRC)                                     |ꆈꌠꁱꂷ (ꍏꉸꏓꂱꇭꉼꇩ)
|15    |is        |neutral |Icelandic                                    |íslenska
|1039  |is-IS     |        |Icelandic (Iceland)                          |íslenska (Ísland)
|16    |it        |neutral |Italian                                      |italiano
|2064  |it-CH     |        |Italian (Switzerland)                        |italiano (Svizzera)
|1040  |it-IT     |        |Italian (Italy)                              |italiano (Italia)
|93    |iu        |neutral |Inuktitut                                    |Inuktitut
|30813 |iu-Cans   |neutral |Inuktitut (Syllabics)                        |ᐃᓄᒃᑎᑐᑦ
|1117  |iu-Cans-CA|        |Inuktitut (Syllabics, Canada)                |ᐃᓄᒃᑎᑐᑦ (ᑲᓇᑕᒥ)
|31837 |iu-Latn   |neutral |Inuktitut (Latin)                            |Inuktitut
|2141  |iu-Latn-CA|        |Inuktitut (Latin, Canada)                    |Inuktitut (Kanatami)
|17    |ja        |neutral |Japanese                                     |日本語
|1041  |ja-JP     |        |Japanese (Japan)                             |日本語 (日本)
|55    |ka        |neutral |Georgian                                     |ქართული
|1079  |ka-GE     |        |Georgian (Georgia)                           |ქართული (საქართველო)
|63    |kk        |neutral |Kazakh                                       |Қазақ
|1087  |kk-KZ     |        |Kazakh (Kazakhstan)                          |Қазақ (Қазақстан)
|111   |kl        |neutral |Greenlandic                                  |kalaallisut
|1135  |kl-GL     |        |Greenlandic (Greenland)                      |kalaallisut (Kalaallit Nunaat)
|83    |km        |neutral |Khmer                                        |ខ្មែរ
|1107  |km-KH     |        |Khmer (Cambodia)                             |ខ្មែរ (កម្ពុជា)
|75    |kn        |neutral |Kannada                                      |ಕನ್ನಡ
|1099  |kn-IN     |        |Kannada (India)                              |ಕನ್ನಡ (ಭಾರತ)
|18    |ko        |neutral |Korean                                       |한국어
|1042  |ko-KR     |        |Korean (Korea)                               |한국어 (대한민국)
|87    |kok       |neutral |Konkani                                      |कोंकणी
|1111  |kok-IN    |        |Konkani (India)                              |कोंकणी (भारत)
|64    |ky        |neutral |Kyrgyz                                       |Кыргыз
|1088  |ky-KG     |        |Kyrgyz (Kyrgyzstan)                          |Кыргыз (Кыргызстан)
|110   |lb        |neutral |Luxembourgish                                |Lëtzebuergesch
|1134  |lb-LU     |        |Luxembourgish (Luxembourg)                   |Lëtzebuergesch (Luxembourg)
|84    |lo        |neutral |Lao                                          |ລາວ
|1108  |lo-LA     |        |Lao (Lao P.D.R.)                             |ລາວ (ສ.ປ.ປ. ລາວ)
|39    |lt        |neutral |Lithuanian                                   |lietuvių
|1063  |lt-LT     |        |Lithuanian (Lithuania)                       |lietuvių (Lietuva)
|38    |lv        |neutral |Latvian                                      |latviešu
|1062  |lv-LV     |        |Latvian (Latvia)                             |latviešu (Latvija)
|129   |mi        |neutral |Maori                                        |Reo Māori
|1153  |mi-NZ     |        |Maori (New Zealand)                          |Reo Māori (Aotearoa)
|47    |mk        |neutral |Macedonian (FYROM)                           |македонски јазик
|1071  |mk-MK     |        |Macedonian (Former Yugoslav Republic of Macedonia)|македонски јазик (Македонија)
|76    |ml        |neutral |Malayalam                                    |മലയാളം
|1100  |ml-IN     |        |Malayalam (India)                            |മലയാളം (ഭാരതം)
|80    |mn        |neutral |Mongolian                                    |Монгол хэл
|30800 |mn-Cyrl   |neutral |Mongolian (Cyrillic)                         |Монгол хэл
|1104  |mn-MN     |        |Mongolian (Cyrillic, Mongolia)               |Монгол хэл (Монгол улс)
|31824 |mn-Mong   |neutral |Mongolian (Traditional Mongolian)            |ᠮᠤᠨᠭᠭᠤᠯ ᠬᠡᠯᠡ
|2128  |mn-Mong-CN|        |Mongolian (Traditional Mongolian, PRC)       |ᠮᠤᠨᠭᠭᠤᠯ ᠬᠡᠯᠡ (ᠪᠦᠭᠦᠳᠡ ᠨᠠᠢᠷᠠᠮᠳᠠᠬᠤ ᠳᠤᠮᠳᠠᠳᠤ ᠠᠷᠠᠳ ᠣᠯᠣᠰ)
|124   |moh       |neutral |Mohawk                                       |Kanien'kéha
|1148  |moh-CA    |        |Mohawk (Mohawk)                              |Kanien'kéha
|78    |mr        |neutral |Marathi                                      |मराठी
|1102  |mr-IN     |        |Marathi (India)                              |मराठी (भारत)
|62    |ms        |neutral |Malay                                        |Bahasa Melayu
|2110  |ms-BN     |        |Malay (Brunei Darussalam)                    |Bahasa Melayu (Brunei Darussalam)
|1086  |ms-MY     |        |Malay (Malaysia)                             |Bahasa Melayu (Malaysia)
|58    |mt        |neutral |Maltese                                      |Malti
|1082  |mt-MT     |        |Maltese (Malta)                              |Malti (Malta)
|31764 |nb        |neutral |Norwegian (Bokmål)                           |norsk (bokmål)
|1044  |nb-NO     |        |Norwegian, Bokmål (Norway)                   |norsk, bokmål (Norge)
|97    |ne        |neutral |Nepali                                       |नेपाली
|1121  |ne-NP     |        |Nepali (Nepal)                               |नेपाली (नेपाल)
|19    |nl        |neutral |Dutch                                        |Nederlands
|2067  |nl-BE     |        |Dutch (Belgium)                              |Nederlands (België)
|1043  |nl-NL     |        |Dutch (Netherlands)                          |Nederlands (Nederland)
|30740 |nn        |neutral |Norwegian (Nynorsk)                          |norsk (nynorsk)
|2068  |nn-NO     |        |Norwegian, Nynorsk (Norway)                  |norsk, nynorsk (Noreg)
|20    |no        |neutral |Norwegian                                    |norsk
|108   |nso       |neutral |Sesotho sa Leboa                             |Sesotho sa Leboa
|1132  |nso-ZA    |        |Sesotho sa Leboa (South Africa)              |Sesotho sa Leboa (Afrika Borwa)
|130   |oc        |neutral |Occitan                                      |Occitan
|1154  |oc-FR     |        |Occitan (France)                             |Occitan (França)
|72    |or        |neutral |Oriya                                        |ଓଡ଼ିଆ
|1096  |or-IN     |        |Oriya (India)                                |ଓଡ଼ିଆ (ଭାରତ)
|70    |pa        |neutral |Punjabi                                      |ਪੰਜਾਬੀ
|1094  |pa-IN     |        |Punjabi (India)                              |ਪੰਜਾਬੀ (ਭਾਰਤ)
|21    |pl        |neutral |Polish                                       |polski
|1045  |pl-PL     |        |Polish (Poland)                              |polski (Polska)
|140   |prs       |neutral |Dari                                         |درى
|1164  |prs-AF    |        |Dari (Afghanistan)                           |درى (افغانستان)
|99    |ps        |neutral |Pashto                                       |پښتو
|1123  |ps-AF     |        |Pashto (Afghanistan)                         |پښتو (افغانستان)
|22    |pt        |neutral |Portuguese                                   |Português
|1046  |pt-BR     |        |Portuguese (Brazil)                          |Português (Brasil)
|2070  |pt-PT     |        |Portuguese (Portugal)                        |português (Portugal)
|134   |qut       |neutral |K'iche                                       |K'iche
|1158  |qut-GT    |        |K'iche (Guatemala)                           |K'iche (Guatemala)
|107   |quz       |neutral |Quechua                                      |runasimi
|1131  |quz-BO    |        |Quechua (Bolivia)                            |runasimi (Qullasuyu)
|2155  |quz-EC    |        |Quechua (Ecuador)                            |runasimi (Ecuador)
|3179  |quz-PE    |        |Quechua (Peru)                               |runasimi (Piruw)
|23    |rm        |neutral |Romansh                                      |Rumantsch
|1047  |rm-CH     |        |Romansh (Switzerland)                        |Rumantsch (Svizra)
|24    |ro        |neutral |Romanian                                     |română
|1048  |ro-RO     |        |Romanian (Romania)                           |română (România)
|25    |ru        |neutral |Russian                                      |русский
|1049  |ru-RU     |        |Russian (Russia)                             |русский (Россия)
|135   |rw        |neutral |Kinyarwanda                                  |Kinyarwanda
|1159  |rw-RW     |        |Kinyarwanda (Rwanda)                         |Kinyarwanda (Rwanda)
|79    |sa        |neutral |Sanskrit                                     |संस्कृत
|1103  |sa-IN     |        |Sanskrit (India)                             |संस्कृत (भारतम्)
|133   |sah       |neutral |Yakut                                        |саха
|1157  |sah-RU    |        |Yakut (Russia)                               |саха (Россия)
|59    |se        |neutral |Sami (Northern)                              |davvisámegiella
|3131  |se-FI     |        |Sami, Northern (Finland)                     |davvisámegiella (Suopma)
|1083  |se-NO     |        |Sami, Northern (Norway)                      |davvisámegiella (Norga)
|2107  |se-SE     |        |Sami, Northern (Sweden)                      |davvisámegiella (Ruoŧŧa)
|91    |si        |neutral |Sinhala                                      |සිංහල
|1115  |si-LK     |        |Sinhala (Sri Lanka)                          |සිංහල (ශ්‍රී ලංකා)
|27    |sk        |neutral |Slovak                                       |slovenčina
|1051  |sk-SK     |        |Slovak (Slovakia)                            |slovenčina (Slovenská republika)
|36    |sl        |neutral |Slovenian                                    |slovenski
|1060  |sl-SI     |        |Slovenian (Slovenia)                         |slovenski (Slovenija)
|30779 |sma       |neutral |Sami (Southern)                              |åarjelsaemiengiele
|6203  |sma-NO    |        |Sami, Southern (Norway)                      |åarjelsaemiengiele (Nöörje)
|7227  |sma-SE    |        |Sami, Southern (Sweden)                      |åarjelsaemiengiele (Sveerje)
|31803 |smj       |neutral |Sami (Lule)                                  |julevusámegiella
|4155  |smj-NO    |        |Sami, Lule (Norway)                          |julevusámegiella (Vuodna)
|5179  |smj-SE    |        |Sami, Lule (Sweden)                          |julevusámegiella (Svierik)
|28731 |smn       |neutral |Sami (Inari)                                 |sämikielâ
|9275  |smn-FI    |        |Sami, Inari (Finland)                        |sämikielâ (Suomâ)
|29755 |sms       |neutral |Sami (Skolt)                                 |sääm´ǩiõll
|8251  |sms-FI    |        |Sami, Skolt (Finland)                        |sääm´ǩiõll (Lää´ddjânnam)
|28    |sq        |neutral |Albanian                                     |shqipe
|1052  |sq-AL     |        |Albanian (Albania)                           |shqipe (Shqipëria)
|31770 |sr        |neutral |Serbian                                      |srpski
|27674 |sr-Cyrl   |neutral |Serbian (Cyrillic)                           |српски
|7194  |sr-Cyrl-BA|        |Serbian (Cyrillic, Bosnia and Herzegovina)   |српски (Босна и Херцеговина)
|3098  |sr-Cyrl-CS|        |Serbian (Cyrillic, Serbia and Montenegro (Former))|српски (Србија и Црна Гора (Претходно))
|12314 |sr-Cyrl-ME|        |Serbian (Cyrillic, Montenegro)               |српски (Црна Гора)
|10266 |sr-Cyrl-RS|        |Serbian (Cyrillic, Serbia)                   |српски (Србија)
|28698 |sr-Latn   |neutral |Serbian (Latin)                              |srpski
|6170  |sr-Latn-BA|        |Serbian (Latin, Bosnia and Herzegovina)      |srpski (Bosna i Hercegovina)
|2074  |sr-Latn-CS|        |Serbian (Latin, Serbia and Montenegro (Former))|srpski (Srbija i Crna Gora (Prethodno))
|11290 |sr-Latn-ME|        |Serbian (Latin, Montenegro)                  |srpski (Crna Gora)
|9242  |sr-Latn-RS|        |Serbian (Latin, Serbia)                      |srpski (Srbija)
|29    |sv        |neutral |Swedish                                      |svenska
|2077  |sv-FI     |        |Swedish (Finland)                            |svenska (Finland)
|1053  |sv-SE     |        |Swedish (Sweden)                             |svenska (Sverige)
|65    |sw        |neutral |Kiswahili                                    |Kiswahili
|1089  |sw-KE     |        |Kiswahili (Kenya)                            |Kiswahili (Kenya)
|90    |syr       |neutral |Syriac                                       |ܣܘܪܝܝܐ
|1114  |syr-SY    |        |Syriac (Syria)                               |ܣܘܪܝܝܐ (سوريا)
|73    |ta        |neutral |Tamil                                        |தமிழ்
|1097  |ta-IN     |        |Tamil (India)                                |தமிழ் (இந்தியா)
|74    |te        |neutral |Telugu                                       |తెలుగు
|1098  |te-IN     |        |Telugu (India)                               |తెలుగు (భారత దేశం)
|40    |tg        |neutral |Tajik                                        |Тоҷикӣ
|31784 |tg-Cyrl   |neutral |Tajik (Cyrillic)                             |Тоҷикӣ
|1064  |tg-Cyrl-TJ|        |Tajik (Cyrillic, Tajikistan)                 |Тоҷикӣ (Тоҷикистон)
|30    |th        |neutral |Thai                                         |ไทย
|1054  |th-TH     |        |Thai (Thailand)                              |ไทย (ไทย)
|66    |tk        |neutral |Turkmen                                      |türkmençe
|1090  |tk-TM     |        |Turkmen (Turkmenistan)                       |türkmençe (Türkmenistan)
|50    |tn        |neutral |Setswana                                     |Setswana
|1074  |tn-ZA     |        |Setswana (South Africa)                      |Setswana (Aforika Borwa)
|31    |tr        |neutral |Turkish                                      |Türkçe
|1055  |tr-TR     |        |Turkish (Turkey)                             |Türkçe (Türkiye)
|68    |tt        |neutral |Tatar                                        |Татар
|1092  |tt-RU     |        |Tatar (Russia)                               |Татар (Россия)
|95    |tzm       |neutral |Tamazight                                    |Tamazight
|31839 |tzm-Latn  |neutral |Tamazight (Latin)                            |Tamazight
|2143  |tzm-Latn-DZ|        |Tamazight (Latin, Algeria)                   |Tamazight (Djazaïr)
|128   |ug        |neutral |Uyghur                                       |ئۇيغۇرچە
|1152  |ug-CN     |        |Uyghur (PRC)                                 |ئۇيغۇرچە (جۇڭخۇا خەلق جۇمھۇرىيىتى)
|34    |uk        |neutral |Ukrainian                                    |українська
|1058  |uk-UA     |        |Ukrainian (Ukraine)                          |українська (Україна)
|32    |ur        |neutral |Urdu                                         |اُردو
|1056  |ur-PK     |        |Urdu (Islamic Republic of Pakistan)          |اُردو (پاکستان)
|67    |uz        |neutral |Uzbek                                        |U'zbek
|30787 |uz-Cyrl   |neutral |Uzbek (Cyrillic)                             |Ўзбек
|2115  |uz-Cyrl-UZ|        |Uzbek (Cyrillic, Uzbekistan)                 |Ўзбек (Ўзбекистон)
|31811 |uz-Latn   |neutral |Uzbek (Latin)                                |U'zbek
|1091  |uz-Latn-UZ|        |Uzbek (Latin, Uzbekistan)                    |U'zbek (U'zbekiston Respublikasi)
|42    |vi        |neutral |Vietnamese                                   |Tiếng Việt
|1066  |vi-VN     |        |Vietnamese (Vietnam)                         |Tiếng Việt (Việt Nam)
|136   |wo        |neutral |Wolof                                        |Wolof
|1160  |wo-SN     |        |Wolof (Senegal)                              |Wolof (Sénégal)
|52    |xh        |neutral |isiXhosa                                     |isiXhosa
|1076  |xh-ZA     |        |isiXhosa (South Africa)                      |isiXhosa (uMzantsi Afrika)
|106   |yo        |neutral |Yoruba                                       |Yoruba
|1130  |yo-NG     |        |Yoruba (Nigeria)                             |Yoruba (Nigeria)
|30724 |zh        |neutral |Chinese                                      |中文
|4     |zh-CHS    |neutral |Chinese (Simplified) Legacy                  |中文(简体) 旧版
|31748 |zh-CHT    |neutral |Chinese (Traditional) Legacy                 |中文(繁體) 舊版
|2052  |zh-CN     |        |Chinese (Simplified, PRC)                    |中文(中华人民共和国)
|3076  |zh-HK     |        |Chinese (Traditional, Hong Kong S.A.R.)      |中文(香港特別行政區)
|4     |zh-Hans   |neutral |Chinese (Simplified)                         |中文(简体)
|31748 |zh-Hant   |neutral |Chinese (Traditional)                        |中文(繁體)
|5124  |zh-MO     |        |Chinese (Traditional, Macao S.A.R.)          |中文(澳門特別行政區)
|4100  |zh-SG     |        |Chinese (Simplified, Singapore)              |中文(新加坡)
|1028  |zh-TW     |        |Chinese (Traditional, Taiwan)                |中文(台灣)
|53    |zu        |neutral |isiZulu                                      |isiZulu
|1077  |zu-ZA     |        |isiZulu (South Africa)                       |isiZulu (iNingizimu Afrika)

§2.4 国・地域に固有な情報の取得 (RegionInfo)

特定の国・地域に固有な情報のみが取得できればよい場合はRegionInfoクラスを使用することも出来ます。 RegionInfoクラスはCultureInfoとは異なり、書式や変換に関する規則等は設定されず、またスレッドにRegionInfoを設定することも出来ません。 InvariantCultureに相当するようなRegionInfoも存在しません。 RegionInfoクラスでは、通貨記号・地域コードのほか、CultureInfoクラスでは取得できないいくつかの情報も取得することが出来ます。

using System;
using System.Globalization;

class Sample {
  static void Main()
  {
    RegionInfo[] regions = new RegionInfo[] {
      new RegionInfo("JP"),
      new RegionInfo("US"),
      new RegionInfo("GB"),
      new RegionInfo("DE"),
      new RegionInfo("ES"),
      new RegionInfo("FR"),
      new RegionInfo("TW"),
      new RegionInfo("CN"),
      new RegionInfo("AE"),
    };

    Console.WriteLine("|{0,-6}| {1,-32}| {2,-5}| {3,-5}| {4,-8}| {5,-18}| {6,-12}| {7,-32}| {8,-32}| {9,-32}| {10}",
                      "Name",
                      "EnglishName",
                      "ISO2",
                      "ISO3",
                      "GeoId",
                      "ISOCurrencySymbol",
                      "CurrSymbol",
                      "CurrencyEnglishName",
                      "CurrencyNativeName",
                      "DisplayName",
                      "NativeName");

    Console.WriteLine(new string('-', 180));

    foreach (RegionInfo r in regions) {
      Console.WriteLine("|{0,-6}| {1,-32}| {2,-5}| {3,-5}| {4,-8}| {5,-18}| {6,-12}| {7,-32}| {8,-32}| {9,-32}| {10}",
                        r.Name,
                        r.EnglishName,
                        r.TwoLetterISORegionName,
                        r.ThreeLetterISORegionName,
                        r.GeoId,
                        r.ISOCurrencySymbol,
                        r.CurrencySymbol,
                        r.CurrencyEnglishName,
                        r.CurrencyNativeName,
                        r.DisplayName,
                        r.NativeName);
    }
  }
}
実行結果
|Name  | EnglishName                     | ISO2 | ISO3 | GeoId   | ISOCurrencySymbol | CurrSymbol  | CurrencyEnglishName             | CurrencyNativeName              | DisplayName                     | NativeName
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|JP    | Japan                           | JP   | JPN  | 122     | JPY               | ¥           | Japanese Yen                    | 円                               | 日本                              | 日本
|US    | United States                   | US   | USA  | 244     | USD               | $           | US Dollar                       | US Dollar                       | 米国                              | United States
|GB    | United Kingdom                  | GB   | GBR  | 242     | GBP               | £           | UK Pound Sterling               | Pound Sterling                  | 英国                              | United Kingdom
|DE    | Germany                         | DE   | DEU  | 94      | EUR               | €           | Euro                            | Euro                            | ドイツ                             | Deutschland
|ES    | Spain                           | ES   | ESP  | 217     | EUR               | €           | Euro                            | euro                            | スペイン                            | España
|FR    | France                          | FR   | FRA  | 84      | EUR               | €           | Euro                            | euro                            | フランス                            | France
|TW    | Taiwan                          | TW   | TWN  | 237     | TWD               | NT$         | New Taiwan Dollar               | 新台幣                             | 台湾                              | 台灣
|CN    | People's Republic of China      | CN   | CHN  | 45      | CNY               | ¥           | PRC Yuan Renminbi               | 人民币                             | 中華人民共和国                         | 中华人民共和国
|AE    | U.A.E.                          | AE   | ARE  | 224     | AED               | د.إ.‏       | UAE Dirham                      | درهم اماراتي                    | アラブ首長国連邦                        | الإمارات العربية المتحدة