この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

CultureInfo クラス

 

公開日: 2016年10月

特定のカルチャに関する情報を提供 (と呼ばれる、ロケールアンマネージ コードの開発)。 この情報には、カルチャの名前、表記体系、使用する暦、文字列の並べ替え順序、および日付と数値の書式が含まれます。

名前空間:   System.Globalization
アセンブリ:  mscorlib (mscorlib.dll 内)

System.Object
  System.Globalization.CultureInfo

[SerializableAttribute]
[ComVisibleAttribute(true)]
public class CultureInfo : ICloneable, IFormatProvider

名前説明
System_CAPS_pubmethodCultureInfo(Int32)

カルチャ識別子によって指定するカルチャに基づいて、CultureInfo クラスの新しいインスタンスを初期化します。

System_CAPS_pubmethodCultureInfo(Int32, Boolean)

カルチャ識別子で指定したカルチャと、システムからユーザーが選択したカルチャを使用するかどうかを指定するブール値に基づいて、CultureInfo クラスの新しいインスタンスを初期化します。

System_CAPS_pubmethodCultureInfo(String)

名前で指定するカルチャに基づいて、CultureInfo クラスの新しいインスタンスを初期化します。

System_CAPS_pubmethodCultureInfo(String, Boolean)

名前で指定したカルチャと、システムからユーザーが選択したカルチャ設定を使用するかどうかを指定するブール値に基づいて、CultureInfo クラスの新しいインスタンスを初期化します。

名前説明
System_CAPS_pubpropertyCalendar

カルチャで使用する既定の暦を取得します。

System_CAPS_pubpropertyCompareInfo

カルチャの文字列を比較する方法を定義する CompareInfo を取得します。

System_CAPS_pubpropertyCultureTypes

現在の CultureInfo オブジェクトに関するカルチャ タイプを取得します。

System_CAPS_pubpropertySystem_CAPS_staticCurrentCulture

現在のスレッドで使用するカルチャを表す CultureInfo オブジェクトを取得または設定します。

System_CAPS_pubpropertySystem_CAPS_staticCurrentUICulture

実行時にカルチャ固有のリソースを参照するためにリソース マネージャーによって使用される現在のユーザー インターフェイスのカルチャを表す CultureInfo オブジェクトを取得または設定します。

System_CAPS_pubpropertyDateTimeFormat

カルチャに対応する、日時の表示形式を定義する DateTimeFormatInfo を取得または設定します。

System_CAPS_pubpropertySystem_CAPS_staticDefaultThreadCurrentCulture

現在のアプリケーション ドメインのスレッドの既定のカルチャを取得または設定します。

System_CAPS_pubpropertySystem_CAPS_staticDefaultThreadCurrentUICulture

現在のアプリケーション ドメイン内のスレッドの既定 UI カルチャを取得または設定します。

System_CAPS_pubpropertyDisplayName

完全にローカライズされたカルチャ名を取得します。

System_CAPS_pubpropertyEnglishName

英語で表した languagefull [country/regionfull] という形式のカルチャ名を取得します。

System_CAPS_pubpropertyIetfLanguageTag

使用しないでください。 言語の RFC 4646 標準 ID を取得します。

System_CAPS_pubpropertySystem_CAPS_staticInstalledUICulture

オペレーティング システムと共にインストールされたカルチャを表す CultureInfo を取得します。

System_CAPS_pubpropertySystem_CAPS_staticInvariantCulture

カルチャに依存しない (インバリアントな) CultureInfo オブジェクトを取得します。

System_CAPS_pubpropertyIsNeutralCulture

現在の CultureInfo がニュートラル カルチャを表しているかどうかを示す値を取得します。

System_CAPS_pubpropertyIsReadOnly

現在の CultureInfo が読み取り専用かどうかを示す値を取得します。

System_CAPS_pubpropertyKeyboardLayoutId

アクティブな入力ロケール識別子を取得します。

System_CAPS_pubpropertyLCID

現在の CultureInfo のカルチャ識別子を取得します。

System_CAPS_pubpropertyName

languagecode2-country/regioncode2 という形式のカルチャ名を取得します。

System_CAPS_pubpropertyNativeName

カルチャの表示設定である、言語、国/地域、およびオプションのスクリプトで構成されるカルチャ名を取得します。

System_CAPS_pubpropertyNumberFormat

数値、通貨、割合を表示する、カルチャに対応する書式を定義する NumberFormatInfo を取得または設定します。

System_CAPS_pubpropertyOptionalCalendars

カルチャで使用できる暦の一覧を取得します。

System_CAPS_pubpropertyParent

現在の CultureInfo の親カルチャを表す CultureInfo を取得します。

System_CAPS_pubpropertyTextInfo

カルチャに関連付けられている書記体系を定義する TextInfo を取得します。

System_CAPS_pubpropertyThreeLetterISOLanguageName

現在の CultureInfo の言語に対する ISO 639-2 の 3 桁の文字コードを取得します。

System_CAPS_pubpropertyThreeLetterWindowsLanguageName

Windows API の定義に従って、言語に対する 3 文字コードを取得します。

System_CAPS_pubpropertyTwoLetterISOLanguageName

現在の CultureInfo の言語に対する ISO 639-1 の 2 桁の文字コードを取得します。

System_CAPS_pubpropertyUseUserOverride

現在の CultureInfo オブジェクトでユーザーが選択したカルチャ設定を使用するかどうかを示す値を取得します。

名前説明
System_CAPS_pubmethodClearCachedData()

キャッシュされたカルチャ関連情報を更新します。

System_CAPS_pubmethodClone()

現在の CultureInfo のコピーを作成します。

System_CAPS_pubmethodSystem_CAPS_staticCreateSpecificCulture(String)

指定した名前に関連付けられている特定のカルチャを表す CultureInfo を作成します。

System_CAPS_pubmethodEquals(Object)

指定したオブジェクトが現在の CultureInfo と同じカルチャかどうかを判断します。(Object.Equals(Object) をオーバーライドします。)

System_CAPS_protmethodFinalize()

オブジェクトがガベージ コレクションにより収集される前に、そのオブジェクトがリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。)

System_CAPS_pubmethodGetConsoleFallbackUICulture()

グラフィック ユーザー インターフェイスの既定のカルチャが不適切な場合、コンソール アプリケーションに適した代替のユーザー インターフェイス カルチャを取得します。

System_CAPS_pubmethodSystem_CAPS_staticGetCultureInfo(Int32)

指定されたカルチャ識別子を使用して、カルチャのキャッシュされた読み取り専用インスタンスを取得します。

System_CAPS_pubmethodSystem_CAPS_staticGetCultureInfo(String)

指定されたカルチャ名を使用して、カルチャのキャッシュされた読み取り専用インスタンスを取得します。

System_CAPS_pubmethodSystem_CAPS_staticGetCultureInfo(String, String)

カルチャのキャッシュされた読み取り専用インスタンスを取得します。 パラメーターは、別のカルチャで指定された TextInfo オブジェクトおよび CompareInfo オブジェクトで初期化されたカルチャを指定します。

System_CAPS_pubmethodSystem_CAPS_staticGetCultureInfoByIetfLanguageTag(String)

使用しないでください。 指定された RFC 4646 言語タグで示される言語特性を持つ、読み取り専用 CultureInfo オブジェクトを取得します。

System_CAPS_pubmethodSystem_CAPS_staticGetCultures(CultureTypes)

サポートされているカルチャを、指定した CultureTypes パラメーターでフィルター処理した結果のリストを取得します。

System_CAPS_pubmethodGetFormat(Type)

指定した型に書式指定する方法を定義するオブジェクトを取得します。

System_CAPS_pubmethodGetHashCode()

現在の CultureInfo のハッシュ関数として機能します。ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。(Object.GetHashCode() をオーバーライドします。)

System_CAPS_pubmethodGetType()

現在のインスタンスの Type を取得します。(Object から継承されます。)

System_CAPS_protmethodMemberwiseClone()

現在の Object の簡易コピーを作成します。(Object から継承されます。)

System_CAPS_pubmethodSystem_CAPS_staticReadOnly(CultureInfo)

指定した CultureInfo オブジェクトをラップする読み取り専用のラッパーを返します。

System_CAPS_pubmethodToString()

"languagecode2-country/regioncode2" という形式で、現在の CultureInfo の名前を格納している文字列を返します。(Object.ToString() をオーバーライドします。)

System_CAPS_noteメモ

この型の .NET Framework ソース コードを表示するを参照してください。、 Reference Sourceです。 ソース コードをオンラインで参照するか、リファレンスをダウンロードしてオフラインで表示するか、デバッグ中にソース (パッチや更新を含む) をステップ実行することができます。 instructionsを参照してください。

CultureInfoクラスなど、言語、サブ言語、国/地域、予定表、および特定のカルチャに関連付けられている規則のカルチャに固有の情報を提供します。 このクラスは、のカルチャに固有のインスタンスへのアクセスも用意されています。、 DateTimeFormatInfoNumberFormatInfoCompareInfo、およびTextInfoオブジェクト。 これらのオブジェクトには、大文字小文字の区別、日付や数値の書式設定文字列を比較するなど、カルチャに固有の操作に必要な情報が含まれています。 CultureInfoクラスは、使用直接的または間接的に書式設定、解析、またはなど、カルチャに固有のデータを操作するクラスによってStringDateTimeDateTimeOffset、および数値型。

このセクションの内容:

カルチャ名と識別子
インバリアント、中間色、および特定のカルチャ
カスタム カルチャ
動的なカルチャ データ
現在のカルチャおよび現在の UI カルチャ
すべてのカルチャを取得します。
カルチャとスレッド
カルチャとアプリケーション ドメイン
カルチャとタスク ベースの非同期操作
CultureInfo オブジェクトのシリアル化
コントロール パネルのオーバーライド
代替の並べ替え順序
カルチャと Windows アプリ

CultureInfoクラスは RFC 4646 に基づく、カルチャごとに一意の名前を指定します。 名前は、言語に関連付けられている ISO 639 2 文字の小文字のカルチャ コードと、ISO 3166 2 文字大文字となり、国または地域に関連付けられているの組み合わせです。 さらに、対象とするアプリの.NET Framework 4またはそれ以降を実行している Windows 10 の下にあるか、後で、タグがサポートされている有効な bcp-47 言語に対応するカルチャ名。

System_CAPS_noteメモ

カルチャ名が渡されたときに、クラス コンス トラクターまたはメソッドになどCreateSpecificCultureまたはCultureInfoケースが重要ではありません。

RFC 4646 に基づくカルチャ名の形式はlanguagecode2>-country/regioncode2ここで、 languagecode2 2 文字の言語コードとcountry/regioncode2 2 文字となりです。 例には、英語 (米国) の日本語 (日本) と EN-US JA-JP が含まれます。 2 文字の言語コードが使用できない場合、ISO 639-2 から派生した 3 文字コードが使用されます。

ある一部のカルチャ名も 15924 ISO に注意してください。 たとえば、というはキリル文字を指定し、Latn がラテン文字を指定します。 スクリプトを含むカルチャ名パターンを使用してlanguagecode2-scripttag-country/regioncode2です。 この種類のカルチャ名の例は、ウズベク語 (ウズベキスタン、キリル文字) に対応するよりです。 Windows Vista より前に、の Windows オペレーティング システムで、スクリプトを含むカルチャ名は、パターンを使用してlanguagecode2-country/regioncode2-scripttagより-より-というウズベク語 (ウズベキスタン、キリル文字)。

2 文字の小文字の言語コードだけがニュートラル カルチャを指定します。 たとえば、fr、フランス語のニュートラル カルチャを指定して de ドイツ語のニュートラル カルチャを指定します。

System_CAPS_noteメモ

このルールに矛盾する 2 つのカルチャ名があります。 中国語 (簡体字)、zh-Hans をという名前と中国語 (繁体字)、それをという名前のカルチャがニュートラル カルチャです。 カルチャ名では、現在の標準を表すし、古い名前 ZH-CHS および ZH-CHT を使用するための理由がない場合に使用する必要があります。

カルチャ識別子は、標準国際省略ではインストールされているカルチャのいずれかを一意に識別するために必要なコンポーネントがあります。 アプリケーションでは、定義済みのカルチャ識別子を使用したり、カスタムの識別子を定義することができます。

定義済みの特定のカルチャの名前と識別子は、この and の他のクラスで使用される、System.Globalization名前空間。 詳細なカルチャ情報に表示されます、 National Language Support (NLS) API Reference Go Global Developer Center にします。

カルチャの名前および識別子が特定のコンピューターに含まれているカルチャのサブセットのみを表すことに注意してください。 Windows のバージョンまたは service pack は、使用できるカルチャを変更できます。 アプリケーションを使用してカスタムのカルチャは追加、CultureAndRegionInfoBuilderクラスです。 ユーザーは、Microsoft ロケール ビルダー ツールを使用して、独自のカスタム カルチャを追加します。 Microsoft ロケール ビルダーが使用してマネージ コードで記述された、CultureAndRegionInfoBuilderクラスです。

いくつかの種類の名前は、カルチャ、特に、次のクラス メンバーに関連付けられている名前と密接に関連します。

カルチャは 3 つのセットにグループ化、通常: インバリアント カルチャ、ニュートラル カルチャ、および特定のカルチャ。

インバリアント カルチャでは、カルチャに依存しません。 アプリケーションでは、空の文字列を使用して名前でインバリアント カルチャを指定 ("") またはその識別子。 InvariantCultureインバリアント カルチャのインスタンスを定義します。 関連付けられている英語の言語ではなくすべての国/地域、ありません。 ほとんどのメソッドで使用されている、Globalizationカルチャを必要とする名前空間。

ニュートラル カルチャは、関連付けられているカルチャの言語には、国/地域使用できません。 特定のカルチャは、言語および国/地域に関連付けられているカルチャです。 たとえば、fr は、ニュートラル カルチャの名前、フランス語、および FR-FR が特定のフランス語 (フランス) カルチャの名前。 中国語 (簡体字)、中国語 (繁体字) がもと見なされるのニュートラル カルチャに注意してください。

インスタンスを作成する、CompareInfoクラスが含まれているデータが任意のためにニュートラル カルチャはお勧めできません。 表示したり、データの並べ替えするには、言語および地域の両方を指定します。 さらに、Nameのプロパティ、CompareInfoオブジェクトがニュートラル カルチャという国のみを返すし、領域は含まれません用に作成します。

定義されたカルチャには、階層を特定のカルチャの親がニュートラル カルチャは、ニュートラル カルチャの親は、インバリアント カルチャがあります。 Parentプロパティには、特定のカルチャに関連付けられているニュートラル カルチャが含まれています。 カスタムのカルチャを定義する必要があります、Parentプロパティこのパターンに準拠しています。

特定のカルチャのリソースが、オペレーティング システムで利用できない場合は、関連付けられているニュートラル カルチャのリソースが使用されます。 ニュートラル カルチャのリソースが利用できない場合は、メイン アセンブリに埋め込まれたリソースが使用されます。 リソース フォールバック プロセスの詳細については、次を参照してください。デスクトップ アプリケーションでのリソースのパッケージ化と配置です。

Windows API のロケールの一覧は、.NET Framework でサポートされるカルチャの一覧から若干異なります。 Windows と相互運用性が必要な場合など、プラットフォーム呼び出しのメカニズムによりアプリケーションする必要がありますを使用してが定義されている特定のカルチャ オペレーティング システムのです。 特定のカルチャの使用と同じであるロケール識別子で識別される同等の Windows ロケールと一貫性を確保するLCIDです。

ADateTimeFormatInfoまたはNumberFormatInfoを特定のカルチャまたはニュートラル カルチャではなく、インバリアント カルチャにのみ作成できます。

場合DateTimeFormatInfo.Calendarは、TaiwanCalendarですが、Thread.CurrentCultureに設定されていない、ZH-TW、 DateTimeFormatInfo.NativeCalendarNameDateTimeFormatInfo.GetEraName、およびDateTimeFormatInfo.GetAbbreviatedEraName空の文字列を返します ("") です。

Windows オペレーティング システムと .NET Framework でサポートされている定義済みのカルチャだけでなく .NET Framework には、カスタムのカルチャの 3 種類がサポートされています。

  • Windows または .NET Framework で使用可能なカルチャを補足するものを新しいカルチャ。 たとえば、アプリケーションをインストールできなかった、 CultureInfo FJ-FJ を表します (または Fijan (フィジー)) をシステムのカルチャ オブジェクト。

  • 置換のカルチャ プロパティを持つ、標準の Windows と .NET Framework でサポートされているカルチャのプロパティと異なります。

  • ユーザーの標準カルチャをオーバーライドします。 ユーザーを使用できますの地域と言語アプリケーションコントロール パネルの 既存のカルチャのプロパティの値をカスタマイズします。

System_CAPS_noteメモ

使用することができます、CultureAndRegionInfoBuilderクラスを定義する、保存、およびカスタムのカルチャを補足または既存のカルチャを置換するを登録します。 CultureAndRegionInfoBuilder.Saveメソッド先のシステムでのカスタム カルチャのインストールに使用できるロケール データ マークアップ言語 (LDML) ファイルを作成します。 使用方法の手順について順を追って、CultureAndRegionInfoBuilder新しいを作成するクラスまたは置換カルチャを参照してください、CultureAndRegionInfoBuilderクラスに関するトピック。

.NET Framework では、カスタムのカルチャをサポートするため、カルチャに固有のデータを操作するときに、次を考慮してください。

  • カスタム カルチャでは、定義済みのカルチャの範囲を超える値を持つことができます。 たとえば、一部のカルチャは、異常に長い月の名前、予期しない日付または時刻形式、またはその他の異常なデータがあります。

  • ユーザー インターフェイスのカルチャに固有のデータを表示するには、ユーザーのカスタマイズ内容を遵守する必要があります。など、ユーザーは、24 時間制または yyyymmdd 形式で指定の日付形式先可能性があります。

  • カスタムのカルチャが既定値をオーバーライドすることに注意してください。 そのため、安定しているデータをカルチャを考慮することはできません。 国名、数値と日付の書式、およびスペルが将来変更可能性があります。 日付と時刻の関数の解析中に渡される日付と時刻の文字列などのカルチャに依存したデータをシリアル化する場合は、インバリアント カルチャまたは特定を使用する必要があります。

CultureTypesシステムにインストールされているカスタムのカルチャのプロパティの値が含まれていますのCultureTypes.UserCustomCultureフラグ、およびカスタムのカルチャが割り当てられているなLCIDのプロパティの値LOCALE_CUSTOM_UNSPECIFIED0x1000 (4096)。 、Windows 10 以降では、この値も割り当てられているカルチャの完全なデータが不足しているシステム定義のカルチャに注意してください。

を除き、インバリアント カルチャのデータは動的です。 これは、定義済みのカルチャについても同様です。 たとえば、国や地域の通貨が新しく導入変更、その単語のスペルまたは変更、使用する暦、し、カルチャの定義に変更を追跡します。 カスタム カルチャが通知することがなく変更され、特定のカルチャは置換カスタム カルチャでオーバーライドされる可能性があります。 また、次のとおり、個々 のユーザーのユーザーは、カルチャの設定をオーバーライドできます。 常にアプリケーションは、カルチャ データを取得する、実行時にする必要があります。

System_CAPS_caution注意

データを保存するときに、アプリケーションは、インバリアント カルチャ、バイナリ形式、または特定のカルチャに依存しない形式を使用する必要があります。 インバリアント カルチャ以外の特定のカルチャに関連付けられている現在の値に従って保存されたデータは読みにくくなる可能性があります。 またはそのカルチャが変更された場合意味的に変更する可能性があります。

.NET Framework アプリケーションでのすべてのスレッドは、現在のカルチャおよび現在の UI カルチャを持っています。 現在のカルチャでは、日付、時刻、数字、および通貨の値、テキスト、大文字と小文字の表記規則、および文字列の比較方法の並べ替え順序の書式指定規則を決定します。 現在の UI カルチャを使用して、実行時にカルチャ固有のリソースを取得します。

System_CAPS_noteメモ

スレッドごとに、現在と現在の UI カルチャを決定する方法については、次を参照してください。、カルチャとスレッドセクションです。 スレッドの現在および現在の UI カルチャを決定する方法については新しいアプリケーション ドメイン、およびアプリケーション ドメインの境界を越えてスレッドの実行を参照してください、カルチャとアプリケーション ドメインセクションです。 タスク ベースの非同期操作を実行するスレッドの現在と現在を決定する方法については、次を参照してください。、カルチャとタスク ベースの非同期操作セクションです。

詳細については、現在のカルチャを参照してください、CultureInfo.CurrentCultureプロパティのトピックです。 詳細については、現在の UI カルチャを参照してください、CultureInfo.CurrentUICultureプロパティのトピックです。

取得することができます、CultureInfoを 2 つの方法のいずれかで現在のカルチャを表すオブジェクト。

次の例では、両方のプロパティ値を取得、比較ことを示しますそれらが等しいか、現在のカルチャの名前を表示します。

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

public class Example
{
   public static void Main()
   {
      CultureInfo culture1 = CultureInfo.CurrentCulture;
      CultureInfo culture2 = Thread.CurrentThread.CurrentCulture;
      Console.WriteLine("The current culture is {0}", culture1.Name);
      Console.WriteLine("The two CultureInfo objects are equal: {0}",
                        culture1 == culture2);
   }
}
// The example displays output like the following:
//     The current culture is en-US
//     The two CultureInfo objects are equal: True

取得することができます、CultureInfoを 2 つの方法のいずれかで現在の UI カルチャを表すオブジェクト。

次の例では、両方のプロパティ値を取得、比較ことを示しますそれらが等しいか、現在の UI カルチャの名前を表示します。

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

public class Example
{
   public static void Main()
   {
      CultureInfo uiCulture1 = CultureInfo.CurrentUICulture;
      CultureInfo uiCulture2 = Thread.CurrentThread.CurrentUICulture;
      Console.WriteLine("The current UI culture is {0}", uiCulture1.Name);
      Console.WriteLine("The two CultureInfo objects are equal: {0}",
                        uiCulture1 == uiCulture2);
   }
}
// The example displays output like the following:
//     The current UI culture is en-US
//     The two CultureInfo objects are equal: True

カルチャとをスレッドの UI カルチャを変更するには、次の操作を行います。

  1. インスタンスを作成、CultureInfoカルチャを表すオブジェクトを呼び出すことによって、CultureInfoクラス コンス トラクターとカルチャの名前を渡します。 CultureInfo(String)コンス トラクターをインスタンス化、CultureInfo新しいカルチャは、Windows の現在のカルチャと同じ場合にユーザーを反映するオブジェクトがオーバーライドされます。 CultureInfo(String, Boolean)コンス トラクターでは、指定することができるかどうか、新しくインスタンス化されたCultureInfoオブジェクトに反映された新しいカルチャは、Windows の現在のカルチャと同じ場合にユーザーが上書きされます。

  2. 割り当てる、CultureInfoオブジェクトをThread.CurrentCultureまたはThread.CurrentUICultureプロパティです。 さらに、デスクトップの .NET Framework の 4.6 以降のバージョンを実行して、アプリに割り当てることも、CultureInfoオブジェクトをCultureInfo.CurrentCultureまたはCultureInfo.CurrentUICultureプロパティです。

次の例では、現在のカルチャを取得します。 、フランス語 (フランス) カルチャ以外のものである場合、現在のカルチャをフランス語 (フランス) に変更します。 それ以外の場合、現在のカルチャをフランス語 (ルクセンブルク) に変わります。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo current = CultureInfo.CurrentCulture;
      Console.WriteLine("The current culture is {0}", current.Name);
      CultureInfo newCulture;
      if (current.Name.Equals("fr-FR"))
         newCulture = new CultureInfo("fr-LU");
      else   
         newCulture = new CultureInfo("fr-FR");

      CultureInfo.CurrentCulture = newCulture;
      Console.WriteLine("The current culture is now {0}", 
                        CultureInfo.CurrentCulture.Name);   
   }
}
// The example displays output like the following:
//     The current culture is en-US
//     The current culture is now fr-FR

次の例では、現在のカルチャを取得します。 その他のものである場合、スロベニア語 (スロベニア) カルチャ スロベニア語 (スロベニア) を現在のカルチャを変更します。 それ以外の場合、現在のカルチャをクロアチア語 (クロアチア) に変わります。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo current = CultureInfo.CurrentUICulture;
      Console.WriteLine("The current UI culture is {0}", current.Name);
      CultureInfo newUICulture;
      if (current.Name.Equals("sl-SI"))
         newUICulture = new CultureInfo("hr-HR");
      else   
         newUICulture = new CultureInfo("sl-SI");

      CultureInfo.CurrentUICulture = newUICulture;
      Console.WriteLine("The current UI culture is now {0}", 
                        CultureInfo.CurrentUICulture.Name);   
   }
}
// The example displays output like the following:
//     The current UI culture is en-US
//     The current UI culture is now sl-SI

または、ローカル コンピューターで使用可能なすべてのカルチャのカルチャの配列特定カテゴリを取得するには呼び出すことによって、GetCulturesメソッドです。 たとえば、単独または組み合わせでは、カスタムのカルチャ、特定のカルチャまたはニュートラル カルチャを取得できます。

次の例では、GetCulturesメソッドを 2 回、最初に、CultureTypes.UserCustomCulture列挙体メンバーをすべてのカスタム カルチャを取得し、使用して、CultureTypes.ReplacementCultures列挙型のメンバーを置換するすべてのカルチャを取得します。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      // Get all custom cultures.
      CultureInfo[] custom = CultureInfo.GetCultures(CultureTypes.UserCustomCulture);
      if (custom.Length == 0) { 
         Console.WriteLine("There are no user-defined custom cultures.");
      }
      else {
         Console.WriteLine("Custom cultures:");
         foreach (var culture in custom) 
            Console.WriteLine("   {0} -- {1}", culture.Name, culture.DisplayName);    
      }
      Console.WriteLine();

      // Get all replacement cultures.
      CultureInfo[] replacements = CultureInfo.GetCultures(CultureTypes.ReplacementCultures);
      if (replacements.Length == 0) { 
         Console.WriteLine("There are no replacement cultures.");
      }                                             
      else {
         Console.WriteLine("Replacement cultures:");
         foreach (var culture in replacements) 
            Console.WriteLine("   {0} -- {1}", culture.Name, culture.DisplayName);    
      }
      Console.WriteLine();
   }
}
// The example displays output like the following:
//     Custom cultures:
//        x-en-US-sample -- English (United States)
//        fj-FJ -- Boumaa Fijian (Viti)
//     
//     There are no replacement cultures.

新しいアプリケーションのスレッドが開始されると、その現在のカルチャおよび UI カルチャの現在は定義されて現在のシステム カルチャによって現在のスレッド カルチャではありません。 この違いを次の例に示します。 フランス語 (フランス) カルチャ (FR-FR)、現在のカルチャと、アプリケーションのスレッドの現在の UI カルチャに設定します。 現在のカルチャが既に FR-FR の場合、英語 (米国) カルチャ (EN-US) を例では、設定します。 通貨値として 3 つの乱数を表示し、さらに、通貨の値として 3 つのよりランダムな数値を表示する新しいスレッドを作成します。 例から出力として、新しいスレッドに表示される通貨の値は反映されておらず、アプリケーションのメイン スレッドからの出力とは異なり、フランス語 (フランス) カルチャの書式指定規則。

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

public class Example
{
   static Random rnd = new Random();

   public static void Main()
   {
      if (Thread.CurrentThread.CurrentCulture.Name != "fr-FR") {
         // If current culture is not fr-FR, set culture to fr-FR.
         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
         Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
      }
      else {
         // Set culture to en-US.
         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
         Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
      }
      ThreadProc();

      Thread worker = new Thread(ThreadProc);
      worker.Name = "WorkerThread";
      worker.Start();
   }

   private static void DisplayThreadInfo()
   {
      Console.WriteLine("\nCurrent Thread Name: '{0}'", 
                        Thread.CurrentThread.Name);
      Console.WriteLine("Current Thread Culture/UI Culture: {0}/{1}", 
                        Thread.CurrentThread.CurrentCulture.Name,
                        Thread.CurrentThread.CurrentUICulture.Name);                        
   }

   private static void DisplayValues()
   {
      // Create new thread and display three random numbers.
      Console.WriteLine("Some currency values:");
      for (int ctr = 0; ctr <= 3; ctr++)
         Console.WriteLine("   {0:C2}", rnd.NextDouble() * 10);                        
   }

   private static void ThreadProc()
   {
      DisplayThreadInfo();
      DisplayValues();
   }
}
// The example displays output similar to the following:
//       Current Thread Name: ''
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          8,11 €
//          1,48 €
//          8,99 €
//          9,04 €
//       
//       Current Thread Name: 'WorkerThread'
//       Current Thread Culture/UI Culture: en-US/en-US
//       Some currency values:
//          $6.72
//          $6.35
//          $2.90
//          $7.72

前に .NET Framework のバージョンで、 .NET Framework 4.5、最も一般的な方法はメイン アプリケーション スレッドが他のすべてのワーカー スレッドと同じカルチャを共有することを確認するが、アプリケーション全体のカルチャの名前を渡すにはまたはCultureInfoにアプリケーション全体のカルチャを表すオブジェクト、System.Threading.ParameterizedThreadStart委任します。 次の例では、このアプローチを使用して、2 つのスレッドに表示される通貨の値が同じカルチャの書式指定規則を反映することを確認してください。

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

public class Example
{
   static Random rnd = new Random();

   public static void Main()
   {
      if (Thread.CurrentThread.CurrentCulture.Name != "fr-FR") {
         // If current culture is not fr-FR, set culture to fr-FR.
         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
         Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
      }   
      else {
         // Set culture to en-US.
         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
         Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
      }
      DisplayThreadInfo();
      DisplayValues();

       Thread worker = new Thread(Example.ThreadProc);
       worker.Name = "WorkerThread";
       worker.Start(Thread.CurrentThread.CurrentCulture);
   }

   private static void DisplayThreadInfo()
   {
      Console.WriteLine("\nCurrent Thread Name: '{0}'", 
                        Thread.CurrentThread.Name);
      Console.WriteLine("Current Thread Culture/UI Culture: {0}/{1}", 
                        Thread.CurrentThread.CurrentCulture.Name,
                        Thread.CurrentThread.CurrentUICulture.Name);                        
   }

   private static void DisplayValues()
   {
      // Create new thread and display three random numbers.
      Console.WriteLine("Some currency values:");
      for (int ctr = 0; ctr <= 3; ctr++)
         Console.WriteLine("   {0:C2}", rnd.NextDouble() * 10);                        
   }

   private static void ThreadProc(Object obj) 
   {
      Thread.CurrentThread.CurrentCulture = (CultureInfo) obj;
      Thread.CurrentThread.CurrentUICulture = (CultureInfo) obj;
      DisplayThreadInfo();
      DisplayValues();
   }
}
// The example displays output similar to the following:
//       Current Thread Name: ''
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          6,83 €
//          3,47 €
//          6,07 €
//          1,70 €
//       
//       Current Thread Name: 'WorkerThread'
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          9,54 €
//          9,50 €
//          0,58 €
//          6,91 €

設定できますカルチャおよび UI カルチャのスレッドのプールのスレッドと同様の方法で呼び出すことによって、ThreadPool.QueueUserWorkItem(WaitCallback, Object)メソッドです。

以降で、 .NET Framework 4.5、設定できますカルチャと UI カルチャのすべてのスレッドのアプリケーション ドメインで割り当てることでより直接的、CultureInfoにカルチャを表すオブジェクト、DefaultThreadCurrentCultureDefaultThreadCurrentUICultureプロパティです。 次の例では、これらのプロパティを使用して、既定のアプリケーション ドメインのすべてのスレッドが同じカルチャを共有することを確認してください。

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

public class Example
{
   static Random rnd = new Random();

   public static void Main()
   {
      if (Thread.CurrentThread.CurrentCulture.Name != "fr-FR") {
         // If current culture is not fr-FR, set culture to fr-FR.
         CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
         CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
      }   
      else {
         // Set culture to en-US.
         CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
         CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
      }
      ThreadProc();

      Thread worker = new Thread(Example.ThreadProc);
      worker.Name = "WorkerThread";
      worker.Start();
   }

   private static void DisplayThreadInfo()
   {
      Console.WriteLine("\nCurrent Thread Name: '{0}'", 
                        Thread.CurrentThread.Name);
      Console.WriteLine("Current Thread Culture/UI Culture: {0}/{1}", 
                        Thread.CurrentThread.CurrentCulture.Name,
                        Thread.CurrentThread.CurrentUICulture.Name);                        
   }

   private static void DisplayValues()
   {
      // Create new thread and display three random numbers.
      Console.WriteLine("Some currency values:");
      for (int ctr = 0; ctr <= 3; ctr++)
         Console.WriteLine("   {0:C2}", rnd.NextDouble() * 10);                        
   }

   private static void ThreadProc() 
   {
      DisplayThreadInfo();
      DisplayValues();
   }
}
// The example displays output similar to the following:
//       Current Thread Name: ''
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          6,83 €
//          3,47 €
//          6,07 €
//          1,70 €
//       
//       Current Thread Name: 'WorkerThread'
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          9,54 €
//          9,50 €
//          0,58 €
//          6,91 €
System_CAPS_warning警告

DefaultThreadCurrentCultureDefaultThreadCurrentUICultureプロパティは、静的メンバーで、既定のカルチャと既定の UI カルチャは、これらのプロパティ値が設定された時刻に最新のアプリケーション ドメインに対してのみを定義します。 詳細については、次のセクションを参照してください。カルチャとアプリケーション ドメインです。

値を割り当てると、DefaultThreadCurrentCultureDefaultThreadCurrentUICultureプロパティ、カルチャ、およびアプリケーション ドメイン内のスレッドの UI カルチャも変更するそれらが明示的に割り当てられていない場合、カルチャ。 ただし、これらのスレッドは、現在のアプリケーション ドメインで、実行中にのみ、新しいカルチャ設定を反映します。 これらのスレッドは、別のアプリケーション ドメインで実行して、そのカルチャがそのアプリケーション ドメインに対して定義されている既定のカルチャになります。 その結果、ことをお勧め、メイン アプリケーション スレッドのカルチャは常に設定し、依存しないこと、DefaultThreadCurrentCultureDefaultThreadCurrentUICultureプロパティを変更します。

DefaultThreadCurrentCulture DefaultThreadCurrentUICultureのみが、プロパティ値を設定または取得時に現在のアプリケーション ドメインの既定のカルチャを明示的に定義する静的プロパティです。 次の例は、既定のアプリケーション ドメインで、既定のカルチャと既定の UI カルチャをフランス語 (フランス) に設定しを使用して、AppDomainSetupクラスおよびAppDomainInitializerロシア語 (ロシア) に、新しいアプリケーション ドメインで、既定のカルチャおよび UI カルチャを設定するデリゲート。 1 つのスレッドは、アプリケーション ドメインごとに、2 つのメソッドを実行します。 スレッドのカルチャおよび UI カルチャは、明示的に設定されていないことです。 注意してください。既定のカルチャと UI カルチャのスレッドを実行しているアプリケーション ドメインから派生しています。 なお、DefaultThreadCurrentCultureDefaultThreadCurrentUICultureプロパティが既定値を返すCultureInfoがメソッドの呼び出しが行われたときに現在のアプリケーション ドメインの値。

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

public class Example
{
   public static void Main()
   {
      // Set the default culture and display the current date in the current application domain.
      Info info1 = new Info();
      SetAppDomainCultures("fr-FR");

      // Create a second application domain.
      AppDomainSetup setup = new AppDomainSetup();
      setup.AppDomainInitializer = SetAppDomainCultures;
      setup.AppDomainInitializerArguments = new string[] { "ru-RU" };
      AppDomain domain = AppDomain.CreateDomain("Domain2", null, setup);
      // Create an Info object in the new application domain.
      Info info2 = (Info) domain.CreateInstanceAndUnwrap(typeof(Example).Assembly.FullName, 
                                                         "Info"); 

      // Execute methods in the two application domains.
      info2.DisplayDate();
      info2.DisplayCultures();

      info1.DisplayDate();
      info1.DisplayCultures();            
   }

   public static void SetAppDomainCultures(string[] names)
   {
      SetAppDomainCultures(names[0]);
   }

   public static void SetAppDomainCultures(string name)
   {
       try {
         CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture(name);
         CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture(name);
      }
      // If an exception occurs, we'll just fall back to the system default.
      catch (CultureNotFoundException) {
         return;
      }   
      catch (ArgumentException) {
         return;
      } 
   }
}

public class Info : MarshalByRefObject
{
   public void DisplayDate()
   {
      Console.WriteLine("Today is {0:D}", DateTime.Now);
   }

   public void DisplayCultures()
   {
      Console.WriteLine("Application domain is {0}", AppDomain.CurrentDomain.Id);
      Console.WriteLine("Default Culture: {0}", CultureInfo.DefaultThreadCurrentCulture);
      Console.WriteLine("Default UI Culture: {0}", CultureInfo.DefaultThreadCurrentUICulture);
   }
}
// The example displays the following output:
//       Today is 14 октября 2011 г.
//       Application domain is 2
//       Default Culture: ru-RU
//       Default UI Culture: ru-RU
//       Today is vendredi 14 octobre 2011
//       Application domain is 1
//       Default Culture: fr-FR
//       Default UI Culture: fr-FR

カルチャとアプリケーション ドメインの詳細については、トピックの「アプリケーション ドメインとスレッド」を参照してください。

タスク ベースの非同期プログラミング パターン使用TaskTask<TResult>プールのスレッドのスレッドでデリゲートを非同期的に実行するオブジェクト。 特定のタスクが実行されている特定のスレッドは、事前にわからないが、実行時にのみ決定されます。

対象とするアプリに対して、.NET Framework 4.6またはそれ以降のバージョン、カルチャ、非同期操作のコンテキストの一部であります。 つまり、以降でアプリをターゲットとする、 .NET Framework 4.6、既定で非同期操作の値を継承する、CurrentCultureおよびCurrentUICulture起動元のスレッドのプロパティです。 現在のカルチャまたは現在の UI カルチャと異なる場合、システムのカルチャ、現在のカルチャはスレッドの境界を越えるおよび非同期操作を実行しているスレッド プールのスレッドの現在のカルチャになります。

簡単な例を次に示します。 使用して、TargetFrameworkAttribute属性ターゲットを.NET Framework 4.6です。 例では、定義、Func<TResult>を委任するformatDelegate通貨値として書式設定されたいくつかの数値を返します。 例では、フランス語 (フランス) に、現在のシステムのカルチャを変更するか、フランス語 (フランス) が既に現在のカルチャでは、英語 (米国) である場合。 その後:

  • メイン アプリケーション スレッドで同期的に実行されるようにデリゲートを直接呼び出します。

  • スレッド プールのスレッドでデリゲートを非同期的に実行するタスクを作成します。

  • 呼び出して、メイン アプリケーション スレッドでデリゲートを同期的に実行されるタスクを作成、Task.RunSynchronouslyメソッドです。

例からの出力では、現在のカルチャをフランス語 (フランス) に変更されたときの元のタスクは非同期で呼び出されるスレッドの現在のカルチャは非同期操作の現在のカルチャになります。

using System;
using System.Globalization;
using System.Runtime.Versioning;
using System.Threading;
using System.Threading.Tasks;

[assembly:TargetFramework(".NETFramework,Version=v4.6")]

public class Example
{

   public static void Main()
   {
       decimal[] values = { 163025412.32m, 18905365.59m };
       string formatString = "C2";
       Func<String> formatDelegate = () => { string output = String.Format("Formatting using the {0} culture on thread {1}.\n",
                                                                           CultureInfo.CurrentCulture.Name,
                                                                           Thread.CurrentThread.ManagedThreadId);
                                             foreach (var value in values)
                                                output += String.Format("{0}   ", value.ToString(formatString));

                                             output += Environment.NewLine;
                                             return output;
                                           };

       Console.WriteLine("The example is running on thread {0}", 
                         Thread.CurrentThread.ManagedThreadId);
       // Make the current culture different from the system culture.
       Console.WriteLine("The current culture is {0}", 
                         CultureInfo.CurrentCulture.Name);
       if (CultureInfo.CurrentCulture.Name == "fr-FR")
          Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
       else
          Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");

       Console.WriteLine("Changed the current culture to {0}.\n",
                         CultureInfo.CurrentCulture.Name);

       // Execute the delegate synchronously.
       Console.WriteLine("Executing the delegate synchronously:");
       Console.WriteLine(formatDelegate());

       // Call an async delegate to format the values using one format string.
       Console.WriteLine("Executing a task asynchronously:"); 
       var t1 = Task.Run(formatDelegate);
       Console.WriteLine(t1.Result);

       Console.WriteLine("Executing a task synchronously:");
       var t2 = new Task<String>(formatDelegate); 
       t2.RunSynchronously();
       Console.WriteLine(t2.Result);
   }
}
// The example displays the following output:
//         The example is running on thread 1
//         The current culture is en-US
//         Changed the current culture to fr-FR.
//
//         Executing the delegate synchronously:
//         Formatting using the fr-FR culture on thread 1.
//         163�025�412,32 �   18�905�365,59 �
//
//         Executing a task asynchronously:
//         Formatting using the fr-FR culture on thread 3.
//         163�025�412,32 �   18�905�365,59 �
//
//         Executing a task synchronously:
//         Formatting using the fr-FR culture on thread 1.
//         163�025�412,32 �   18�905�365,59 �

前のバージョンの .NET Framework のバージョンを対象とするアプリ用の.NET Framework 4.6をかの特定のバージョン、.NET Framework の対象としないアプリの場合は、呼び出し元のスレッドのカルチャがタスクのコンテキストの一部です。 代わりに、明示的に定義されている場合を除き、既定では新しいスレッドのカルチャには、システムのカルチャです。 次の例では、前の例に点がない、TargetFrameworkAttribute属性、これを示します。 例が実行されるシステムのシステムのカルチャが英語 (米国) であるため、スレッド プールのスレッドで非同期的に実行されるタスクのカルチャは EN-US fr-fr などです。

using System;
using System.Globalization;
using System.Runtime.Versioning;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
       decimal[] values = { 163025412.32m, 18905365.59m };
       string formatString = "C2";
       Func<String> formatDelegate = () => { string output = String.Format("Formatting using the {0} culture on thread {1}.\n",
                                                                           CultureInfo.CurrentCulture.Name,
                                                                           Thread.CurrentThread.ManagedThreadId);
                                             foreach (var value in values)
                                                output += String.Format("{0}   ", value.ToString(formatString));

                                             output += Environment.NewLine;
                                             return output;
                                           };

       Console.WriteLine("The example is running on thread {0}", 
                         Thread.CurrentThread.ManagedThreadId);
       // Make the current culture different from the system culture.
       Console.WriteLine("The current culture is {0}", 
                         CultureInfo.CurrentCulture.Name);
       if (CultureInfo.CurrentCulture.Name == "fr-FR")
          Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
       else
          Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");

       Console.WriteLine("Changed the current culture to {0}.\n",
                         CultureInfo.CurrentCulture.Name);

       // Execute the delegate synchronously.
       Console.WriteLine("Executing the delegate synchronously:");
       Console.WriteLine(formatDelegate());

       // Call an async delegate to format the values using one format string.
       Console.WriteLine("Executing a task asynchronously:"); 
       var t1 = Task.Run(formatDelegate);
       Console.WriteLine(t1.Result);

       Console.WriteLine("Executing a task synchronously:");
       var t2 = new Task<String>(formatDelegate); 
       t2.RunSynchronously();
       Console.WriteLine(t2.Result);
   }
}
// The example displays the following output:
//     The example is running on thread 1
//     The current culture is en-US
//     Changed the current culture to fr-FR.
//     
//     Executing the delegate synchronously:
//     Formatting using the fr-FR culture on thread 1.
//     163�025�412,32 �   18�905�365,59 �
//     
//     Executing a task asynchronously:
//     Formatting using the en-US culture on thread 3.
//     $163,025,412.32   $18,905,365.59
//     
//     Executing a task synchronously:
//     Formatting using the fr-FR culture on thread 1.
//     163�025�412,32 �   18�905�365,59 �

.NET Framework のバージョンを対象とするアプリの.NET Framework 4.5し、後で、前に、 .NET Framework 4.6、使用することができます、DefaultThreadCurrentCultureDefaultThreadCurrentUICultureプール スレッドのスレッドで実行される非同期タスクで、呼び出し元スレッドのカルチャが使用されるようにするプロパティです。 使用する点を除いて、次の例は、前の例と同じ、DefaultThreadCurrentCultureがあるメイン アプリケーションのスレッドと同じカルチャのプロパティをそのスレッド プールのスレッドをことを確認します。

using System;
using System.Globalization;
using System.Runtime.Versioning;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
       decimal[] values = { 163025412.32m, 18905365.59m };
       string formatString = "C2";
       Func<String> formatDelegate = () => { string output = String.Format("Formatting using the {0} culture on thread {1}.\n",
                                                                           CultureInfo.CurrentCulture.Name,
                                                                           Thread.CurrentThread.ManagedThreadId);
                                             foreach (var value in values)
                                                output += String.Format("{0}   ", value.ToString(formatString));

                                             output += Environment.NewLine;
                                             return output;
                                           };

       Console.WriteLine("The example is running on thread {0}", 
                         Thread.CurrentThread.ManagedThreadId);
       // Make the current culture different from the system culture.
       Console.WriteLine("The current culture is {0}", 
                         CultureInfo.CurrentCulture.Name);
       if (CultureInfo.CurrentCulture.Name == "fr-FR")
          Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
       else
          Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");

       Console.WriteLine("Changed the current culture to {0}.\n",
                         CultureInfo.CurrentCulture.Name);
       CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CurrentCulture;

       // Execute the delegate synchronously.
       Console.WriteLine("Executing the delegate synchronously:");
       Console.WriteLine(formatDelegate());

       // Call an async delegate to format the values using one format string.
       Console.WriteLine("Executing a task asynchronously:"); 
       var t1 = Task.Run(formatDelegate);
       Console.WriteLine(t1.Result);

       Console.WriteLine("Executing a task synchronously:");
       var t2 = new Task<String>(formatDelegate); 
       t2.RunSynchronously();
       Console.WriteLine(t2.Result);
   }
}
// The example displays the following output:
//     The example is running on thread 1
//     The current culture is en-US
//     Changed the current culture to fr-FR.
//     
//     Executing the delegate synchronously:
//     Formatting using the fr-FR culture on thread 1.
//     163�025�412,32 �   18�905�365,59 �
//     
//     Executing a task asynchronously:
//     Formatting using the fr-FR culture on thread 3.
//     163�025�412,32 �   18�905�365,59 �
//     
//     Executing a task synchronously:
//     Formatting using the fr-FR culture on thread 1.
//     163�025�412,32 �   18�905�365,59 �

DefaultThreadCurrentCultureおよびDefaultThreadCurrentUICultureアプリごとのドメインのプロパティは、既定のカルチャを確立するは、すべてのスレッドに明示的に特定のアプリケーション ドメイン内のカルチャが割り当てられているためです。 ただし、対象とするアプリの場合は、.NET Framework 4.6後で、呼び出し元のスレッドのカルチャもそのまま残ります非同期タスクのコンテキストの一部のタスクは、アプリ ドメインの境界を越えるか。

次の例では、タスクを実行しているメソッドは、アプリケーション ドメインの境界を越える場合でもすること、呼び出し元スレッドのカルチャはタスクベースの非同期操作の現在のカルチャを引き続きを示します。 クラスを定義DataRetriever、単一のメソッドとGetFormattedNumber1 ~ 1,000 通貨値として書式設定でランダムな倍精度浮動小数点数を返します。 最初のタスクが実行されるだけをインスタンス化するDataRetrieverインスタンスとの呼び出しのGetFormattedNumberメソッドです。 2 番目のタスクの現在のアプリケーション ドメインを報告新しいアプリケーション ドメインを作成のインスタンスを作成、DataRetriever新しいアプリケーション ドメインと呼び出しのインスタンスそのGetFormattedNumberメソッドです。 例の出力に示す、現在のカルチャが同じまま呼び出し元のスレッド、最初のタスクと 2 番目のタスクでメイン アプリケーションと 2 つ目のアプリケーション ドメインで実行時にします。

using System;
using System.Globalization;
using System.Runtime.Versioning;
using System.Threading;
using System.Threading.Tasks;

[assembly:TargetFramework(".NETFramework,Version=v4.6")]

public class Example
{
   public static void Main()
   {
       string formatString = "C2";
       Console.WriteLine("The example is running on thread {0}", 
                         Thread.CurrentThread.ManagedThreadId);
       // Make the current culture different from the system culture.
       Console.WriteLine("The current culture is {0}", 
                         CultureInfo.CurrentCulture.Name);
       if (CultureInfo.CurrentCulture.Name == "fr-FR")
          Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
       else
          Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");

       Console.WriteLine("Changed the current culture to {0}.\n",
                         CultureInfo.CurrentCulture.Name);

       // Call an async delegate to format the values using one format string.
       Console.WriteLine("Executing a task asynchronously in the main appdomain:"); 
       var t1 = Task.Run(() => { DataRetriever d = new DataRetriever();
                                 return d.GetFormattedNumber(formatString);
                               });
       Console.WriteLine(t1.Result);
       Console.WriteLine(); 

       Console.WriteLine("Executing a task synchronously in two appdomains:");
       var t2 = Task.Run(() => { Console.WriteLine("Thread {0} is running in app domain '{1}'", 
                                                   Thread.CurrentThread.ManagedThreadId, 
                                                   AppDomain.CurrentDomain.FriendlyName);
                                 AppDomain domain = AppDomain.CreateDomain("Domain2");
                                 DataRetriever d = (DataRetriever) domain.CreateInstanceAndUnwrap(typeof(Example).Assembly.FullName,
                                                   "DataRetriever");
                                 return d.GetFormattedNumber(formatString); 
                               }); 
       Console.WriteLine(t2.Result);
   }
}

public class DataRetriever : MarshalByRefObject
{
   public string GetFormattedNumber(String format)
   {
      Thread thread = Thread.CurrentThread;
      Console.WriteLine("Current culture is {0}", thread.CurrentCulture);
      Console.WriteLine("Thread {0} is running in app domain '{1}'", 
                        thread.ManagedThreadId, 
                        AppDomain.CurrentDomain.FriendlyName);
      Random rnd = new Random();
      Double value = rnd.NextDouble() * 1000;
      return value.ToString(format);
   }
}
// The example displays output like the following:
//     The example is running on thread 1
//     The current culture is en-US
//     Changed the current culture to fr-FR.
//     
//     Executing a task asynchronously in a single appdomain:
//     Current culture is fr-FR
//     Thread 3 is running in app domain 'AsyncCulture4.exe'
//     93,48 �
//     
//     Executing a task synchronously in two appdomains:
//     Thread 4 is running in app domain 'AsyncCulture4.exe'
//     Current culture is fr-FR
//     Thread 4 is running in app domain 'Domain2'
//     288,66 �

ときに、CultureInfoオブジェクトをシリアル化、実際に格納されているはNameUseUserOverrideです。 環境でのみ正常にシリアル化解除は場所をName同じ意味を持ちます。 次の 3 つの例は、これが理由を表示する場合。

  • 場合、CultureTypesプロパティの値がCultureTypes.WindowsOnlyCultures、し、そのカルチャは、Windows Vista または Windows オペレーティング システムの以降のバージョンで初めて導入された場合、は、Windows XP で逆シリアル化することはできません。 同様に、カルチャは、Windows XP Service Pack 2 で初めて導入された場合、カルチャがインストールされていない Windows XP システムをシリアル化を解除することはできません。

  • 場合、CultureTypes値はCultureTypes.UserCustomCultureとは逆シリアル化されたコンピューターにインストールされているこのユーザーのカスタム カルチャいない、逆シリアル化することはできません。

  • 場合、CultureTypes値はCultureTypes.ReplacementCulturesが逆シリアル化されたコンピューターがこの置換カルチャと、同じ名前が同じ特性の一部を逆シリアル化します。 たとえば、EN-US がコンピューター B ではなくが、コンピューター A では、置換カルチャである場合や、CultureInfo転送のカルチャのカスタムの特性のいずれもコンピューター A でシリアル化され、コンピューター B で逆シリアル化がこのカルチャを参照するオブジェクトします。 カルチャには、異なる意味を持つが、正常に逆シリアル化されます。

ユーザーは、Windows のコントロール パネルの地域と言語のオプション部分での現在のカルチャに関連付けられている値の一部をオーバーライドすることもできます。 たとえば、ユーザーは、別の形式で日付を表示するか、カルチャの既定値とは異なる通貨を使用することもできます。 一般に、アプリケーションでは、ユーザーによるオーバーライドを受け入れる必要があります。

場合UseUserOverridetrueと指定したカルチャには、Windows の現在のカルチャが一致する、CultureInfoプロパティのユーザー設定を含む、それらの上書きを使用して、DateTimeFormatInfoによって返されるインスタンス、DateTimeFormatプロパティ、およびプロパティのNumberFormatInfoによって返されるインスタンス、NumberFormatプロパティです。 ユーザーの設定に関連付けられているカルチャと互換性がないかどうか、CultureInfoなど、選択したカレンダーは、のいずれかでがない場合、OptionalCalendarsメソッドの結果と、プロパティの値が定義されていません。

一部のカルチャでは、複数の並べ替え順序がサポートされています。 例:

  • スペイン語 (スペイン) のカルチャが 2 つの並べ替え順序: 既定の国際対応の並べ替え順序、および従来の並べ替え順序。 インスタンス化するときに、 CultureInfo ES-ES カルチャの名前を持つオブジェクトの国際対応の並べ替え順序を使用します。 インスタンス化するときに、 CultureInfo es ES-tradnl カルチャ名でオブジェクトです。 従来の並べ替え順序が使用されます。

  • ZH-CN (中国語 (簡体字、中国)) のカルチャには、2 つの並べ替え順序がサポートされています: 画数とによって発音 (既定)。 インスタンス化するときに、 CultureInfo ZH-CN カルチャの名前を持つオブジェクトの既定の並べ替え順序が使用されます。 インスタンス化するときに、 CultureInfo 0x00020804 のローカル識別子を持つオブジェクトの文字列は画数によって並べ替えられます。

代替の並べ替え順序をサポートするカルチャと、各カルチャの既定の並べ替え順序および代替の並べ替え順序の識別子を次の表に示します。

カルチャ名

カルチャ

既定の並べ替え名と識別子

代替の並べ替え名と識別子

es-ES

スペイン語 (スペイン)

International: 0x00000C0A

Traditional: 0x0000040A

zh-TW

中国語 (台湾)

Stroke Count: 0x00000404

Bopomofo: 0x00030404

zh-CN

中国語 (中国)

Pronunciation: 0x00000804

Stroke Count: 0x00020804

zh-HK

中国語 (香港特別行政区)

Stroke Count: 0x00000c04

Stroke Count: 0x00020c04

zh-SG

中国語 (シンガポール)

Pronunciation: 0x00001004

Stroke Count: 0x00021004

zh-MO

中国語 (マカオ)

Pronunciation: 0x00001404

Stroke Count: 0x00021404

ja-JP

日本語 (日本)

Default: 0x00000411

Unicode: 0x00010411

ko-KR

韓国語 (韓国)

Default: 0x00000412

Korean Xwansung - Unicode: 0x00010412

de-DE

ドイツ語 (ドイツ)

Dictionary: 0x00000407

Phone Book Sort DIN: 0x00010407

hu-HU

ハンガリー語 (ハンガリー)

Default: 0x0000040e

Technical Sort: 0x0001040e

ka-GE

グルジア語 (グルジア共和国)

Traditional: 0x00000437

Modern Sort: 0x00010437

Windows アプリで、CurrentCultureCurrentUICultureプロパティは読み取り専用。 現在のカルチャおよび現在の UI カルチャを設定するには Windows を使用して、 ResourceContext.Languagesプロパティです。 次の例は、アプリケーションの現在のカルチャと現在の UI カルチャを変更する英語 (米国) のいずれかまたは現在のカルチャが英語 (米国)、フランス語 (フランス) に既にある場合。 値、CurrentCultureCurrentUICultureプロパティに表示されます、TextBlockという名前のコントロールblockです。 両方のプロパティ値がの新しい値を反映する、出力の例に示す、 ResourceContext.Languagesプロパティです。


ResourceContext context = ResourceManager.Current.DefaultContext;
var list = new List<String>();
if (CultureInfo.CurrentCulture.Name == "en-US")
   list.Add("fr-FR");
else
   list.Add("en-US");

context.Languages = list;
block.Text += String.Format("\nThe current culture is {0}\n",
                            CultureInfo.CurrentCulture);
block.Text += String.Format("The current culture UI is {0}\n",
                            CultureInfo.CurrentUICulture);
// The example displays output like the following if run on a system
// whose current culture is English (United States):
// The current culture is fr-FR
// The current UI culture is fr-FR   


Dim context As ResourceContext = ResourceManager.Current.DefaultContext
Dim list As New List(Of String)()
If CultureInfo.CurrentCulture.Name = "en-US" Then
   list.Add("fr-FR")
Else
   list.Add("en-US")
End If
context.Languages = list
block.Text += String.Format("{1}The current culture is {0}{1}",
                            CultureInfo.CurrentCulture, vbCrLf)
block.Text += String.Format("The current culture UI is {0}\n",
                            CultureInfo.CurrentUICulture)
' The example displays output Like the following if run on a system
' whose current culture Is English (United States):
'    The current culture Is fr-FR
'    The current UI culture Is fr-FR   

次の例を作成する方法を示しています、CultureInfo別の国際対応の並べ替えとスペイン語 (スペイン) のオブジェクトCultureInfoトラディショナル ソートを持つオブジェクト。

using System;
using System.Collections;
using System.Globalization;

public class SamplesCultureInfo
{

   public static void Main()
   {

      // Creates and initializes the CultureInfo which uses the international sort.
      CultureInfo myCIintl = new CultureInfo("es-ES", false);

      // Creates and initializes the CultureInfo which uses the traditional sort.
      CultureInfo myCItrad = new CultureInfo(0x040A, false);

      // Displays the properties of each culture.
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "PROPERTY", "INTERNATIONAL", "TRADITIONAL");
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "CompareInfo", myCIintl.CompareInfo, myCItrad.CompareInfo);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "DisplayName", myCIintl.DisplayName, myCItrad.DisplayName);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "EnglishName", myCIintl.EnglishName, myCItrad.EnglishName);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "IsNeutralCulture", myCIintl.IsNeutralCulture, myCItrad.IsNeutralCulture);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "IsReadOnly", myCIintl.IsReadOnly, myCItrad.IsReadOnly);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "LCID", myCIintl.LCID, myCItrad.LCID);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "Name", myCIintl.Name, myCItrad.Name);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "NativeName", myCIintl.NativeName, myCItrad.NativeName);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "Parent", myCIintl.Parent, myCItrad.Parent);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "TextInfo", myCIintl.TextInfo, myCItrad.TextInfo);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "ThreeLetterISOLanguageName", myCIintl.ThreeLetterISOLanguageName, myCItrad.ThreeLetterISOLanguageName);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "ThreeLetterWindowsLanguageName", myCIintl.ThreeLetterWindowsLanguageName, myCItrad.ThreeLetterWindowsLanguageName);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "TwoLetterISOLanguageName", myCIintl.TwoLetterISOLanguageName, myCItrad.TwoLetterISOLanguageName);
      Console.WriteLine();

      // Compare two strings using myCIintl.
      Console.WriteLine("Comparing \"llegar\" and \"lugar\"");
      Console.WriteLine("   With myCIintl.CompareInfo.Compare: {0}", myCIintl.CompareInfo.Compare("llegar", "lugar"));
      Console.WriteLine("   With myCItrad.CompareInfo.Compare: {0}", myCItrad.CompareInfo.Compare("llegar", "lugar"));

   }

}

/*
This code produces the following output.

PROPERTY                       INTERNATIONAL                                  TRADITIONAL              
CompareInfo                    CompareInfo - es-ES                            CompareInfo - es-ES_tradnl
DisplayName                    Spanish (Spain)                                Spanish (Spain)          
EnglishName                    Spanish (Spain, International Sort)            Spanish (Spain, Traditional Sort)
IsNeutralCulture               False                                          False                    
IsReadOnly                     False                                          False                    
LCID                           3082                                           1034                     
Name                           es-ES                                          es-ES                    
NativeName                     Español (España, alfabetización internacional) Español (España, alfabetización tradicional)
Parent                         es                                             es                       
TextInfo                       TextInfo - es-ES                               TextInfo - es-ES_tradnl  
ThreeLetterISOLanguageName     spa                                            spa                      
ThreeLetterWindowsLanguageName ESN                                            ESP                      
TwoLetterISOLanguageName       es                                             es                       

Comparing "llegar" and "lugar"
   With myCIintl.CompareInfo.Compare: -1
   With myCItrad.CompareInfo.Compare: 1

*/

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
1.1 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能
Windows Phone
8.1 以降で使用可能

この型のパブリック static (Visual Basic では Shared ) メンバーはスレッド セーフです。インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

トップに戻る
表示: