CultureInfoクラス

コンストラクタ

public CultureInfo (
    string name,
    bool useUserOverride // ユーザーが選択したカルチャ設定を用いるならばtrue、既定のカルチャ設定ならばfalse
    );
CultureInfo(String, Boolean) - CultureInfo Constructor (System.Globalization) | Microsoft Learn

nameに指定できる文字列は、[MS-LCID]: Appendix A: Product Behavior | Microsoft LearnのLanguage tag列にあります。またWindows 10以降ならば、BCP 47 (RFC 4646) の文字列も利用できます。大文字/小文字は区別されません。

CultureInfo c1 = new CultureInfo("en");    // "English"
CultureInfo c2 = new CultureInfo("en-GB"); // "English (United Kingdom)"
CultureInfo c3 = new CultureInfo("ja");    // "日本語"
CultureInfo c4 = new CultureInfo("zh-CN"); // "中文(中国)"

nameが無効なカルチャ識別子だったとき、.NET Framework 3.5以前ならばArgumentException、それより後ならばCultureNotFoundExceptionが投げられます。例外を独自に処理しないならば、CreateSpecificCulture()で生成するようにします。

プロパティ

静的プロパティ
プロパティ 内容
CultureInfo CurrentCulture 現在のスレッドとタスクベースの非同期操作で使用されているカルチャ
CultureInfo CurrentUICulture 現在のスレッドのResource Managerで使用されている、UI (ユーザーインターフェイス) のカルチャ
CultureInfo DefaultThreadCurrentCulture 現在のアプリケーション ドメインのスレッドの、既定のカルチャ。既定はnull
CultureInfo DefaultThreadCurrentUICulture 現在のアプリケーション ドメインのスレッドの、既定のUI (ユーザーインターフェイス) のカルチャ。既定はnull
CultureInfo InvariantCulture 文化 (culture/カルチャ) に依存しない (independent)、つまりインバリアント (invariant) なカルチャ

(英語に関連付けられているが、国、地域には関連付けられていない)

     
プロパティ 内容
string Name languagecode2-country/regioncode2の形式のカルチャ名
int LCID カルチャ識別子 (culture identifier)。LCID (LoCale IDentifier)
string TwoLetterISOLanguageName カルチャの言語のISO 639-1の2文字のコード。それが存在しないならばISO 639-3の3文字のコード
string ThreeLetterISOLanguageName カルチャの言語のISO 639-2の3文字のコード
CultureInfo Parent 現在のカルチャの親カルチャ
CompareInfo CompareInfo カルチャの文字列を比較する方法を定義するCompareInfoを得られる
bool IsNeutralCulture trueならば、現在のカルチャがニュートラル カルチャ (neutral culture) を表している
     
プロパティ - CultureInfo クラス (System.Globalization) | Microsoft Learn

CurrentCulture

現在のスレッドのカルチャです。

CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("ja");
string s1 = new Exception().Message; // 種類 'System.Exception' の例外がスローされました。

CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("en");
string s2 = new Exception().Message; // Exception of type 'System.Exception' was thrown.

そのためこのプロパティへの設定は、現在のスレッドのカルチャにのみ作用します。

string name1 = CultureInfo.CurrentCulture.Name; // "ja-JP"
CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("en");
string name2 = CultureInfo.CurrentCulture.Name; // "en"

Task.Run(() =>
{
    string name3 = CultureInfo.CurrentCulture.Name; // "ja-JP"
    CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("es");
    string name4 = CultureInfo.CurrentCulture.Name; // "es"
}).Wait();

Task.Run(() =>
{
    string name5 = CultureInfo.CurrentCulture.Name; // "ja-JP"
    CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("zh");
    string name6 = CultureInfo.CurrentCulture.Name; // "zh"
}).Wait();

string name7 = CultureInfo.CurrentCulture.Name; // "en"

これをアプリケーション全体に適用させるには、DefaultThreadCurrentCultureに設定します。

CurrentUICulture

.NET Framework 4.6以降、このプロパティに設定するのはSystem.Threading.Thread.CurrentThread.CurrentUICultureに設定するのと同じです。Remarks - CultureInfo.CurrentUICulture Property (System.Globalization) | Microsoft Learn

このプロパティへの設定は、CurrentCulture同様に現在のスレッドにのみ適用されるため、アプリケーション全体とするにはDefaultThreadCurrentUICultureを用います。

Parent

ニュートラル カルチャの親はInvariantCultureであり、InvariantCultureの親はInvariantCulture自身です。

CultureInfo c1 = new CultureInfo("en-US"); // "英語 (米国)"
CultureInfo c2 = c1.Parent;                // "英語"
CultureInfo c3 = c2.Parent;                // "ロケールに依存しない言語 (ロケールに依存しない国)
CultureInfo c4 = c3.Parent;                // "ロケールに依存しない言語 (ロケールに依存しない国)

bool r1 = c2 == c3; // false
bool r2 = c3 == c4; // true (InvariantCultureの親は、それ自身と同じ)

メソッド

メソッド 機能
   

CreateSpecificCulture()

指定の名前に関連付けられたカルチャを表すCultureInfoを作成できます。

public static System.Globalization.CultureInfo CreateSpecificCulture (string name);
CultureInfo.CreateSpecificCulture(String) Method (System.Globalization) | Microsoft Learn

通常はコンストラクタの呼び出しと同じですが、nameが無効なためArgumentExceptionが投げられたときにはニュートラル カルチャ (neutral culture) の取得が試みられます。CreateSpecificCulture - cultureinfo.cs

Equals()

2つのCultureInfoインスタンスが同一のカルチャであるかは、Equals()で比較します。このメソッドはNameとCompareInfoプロパティが等しいことで評価します。Remarks - CultureInfo.Equals(Object) Method (System.Globalization) | Microsoft Learn

一方で等値演算子で比較した場合は、インスタンスが同一であるかで評価されます。

CultureInfo c1 = new CultureInfo("ja");
CultureInfo c2 = new CultureInfo("ja");
CultureInfo c3 = c2;

bool r1 = c1.Equals(c2); // true
bool r2 = c3.Equals(c2); // true

bool r3 = c1 == c2; // false
bool r4 = c3 == c2; // true
Microsoft Learnから検索