CultureInfo クラス

定義

特定のカルチャ (アンマネージ コードの開発では "ロケール" と呼ばれます) に関する情報を提供します。Provides information about a specific culture (called a locale for unmanaged code development). この情報には、カルチャの名前、表記体系、使用する暦、文字列の並べ替え順序、および日付と数値の書式が含まれます。The information includes the names for the culture, the writing system, the calendar used, the sort order of strings, and formatting for dates and numbers.

public ref class CultureInfo : ICloneable, IFormatProvider
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class CultureInfo : ICloneable, IFormatProvider
type CultureInfo = class
    interface ICloneable
    interface IFormatProvider
Public Class CultureInfo
Implements ICloneable, IFormatProvider
継承
CultureInfo
属性
実装

次の例では、国際並べ替えを使用してスペイン語 (スペイン) 用の CultureInfo オブジェクトを作成し、従来の並べ替えを使用して別の CultureInfo オブジェクトを作成する方法を示します。The following example shows how to create a CultureInfo object for Spanish (Spain) with the international sort and another CultureInfo object with the traditional sort.

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
int main()
{
   
   // Creates and initializes the CultureInfo which uses the international sort.
   CultureInfo^ myCIintl = gcnew CultureInfo( "es-ES",false );
   
   // Creates and initializes the CultureInfo which uses the traditional sort.
   CultureInfo^ myCItrad = gcnew 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

*/
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

*/
Imports System.Collections
Imports System.Globalization

Module Module1

    Public Sub Main()

        ' Creates and initializes the CultureInfo which uses the international sort.
        Dim myCIintl As New CultureInfo("es-ES", False)

        ' Creates and initializes the CultureInfo which uses the traditional sort.
        Dim myCItrad As New CultureInfo(&H40A, 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"))

    End Sub



'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

End Module

注釈

CultureInfo クラスは、特定のカルチャに関連付けられた言語、サブ言語、国/地域、暦、規則などのカルチャ固有の情報を提供します。The CultureInfo class provides culture-specific information, such as the language, sublanguage, country/region, calendar, and conventions associated with a particular culture. このクラスは、DateTimeFormatInfoNumberFormatInfoCompareInfo、および TextInfo オブジェクトのカルチャ固有のインスタンスへのアクセスも提供します。This class also provides access to culture-specific instances of the DateTimeFormatInfo, NumberFormatInfo, CompareInfo, and TextInfo objects. これらのオブジェクトには、大文字と小文字の区別、日付と数値の書式設定、文字列の比較など、カルチャ固有の操作に必要な情報が含まれています。These objects contain the information required for culture-specific operations, such as casing, formatting dates and numbers, and comparing strings. CultureInfo クラスは、StringDateTimeDateTimeOffset、数値型など、カルチャ固有のデータを書式設定、解析、または操作するクラスによって直接的または間接的に使用されます。The CultureInfo class is used either directly or indirectly by classes that format, parse, or manipulate culture-specific data, such as String, DateTime, DateTimeOffset, and the numeric types.

このセクションの内容:In this section:

カルチャ名と識別子 Culture names and identifiers
インバリアント、ニュートラル、および特定のカルチャ Invariant, neutral, and specific cultures
カスタムカルチャ Custom cultures
動的なカルチャデータ Dynamic culture data
CultureInfo と文化のデータ現在のカルチャと現在の UI カルチャ CultureInfo and cultural data The current culture and current UI culture
すべてのカルチャの取得 Getting all cultures
カルチャとスレッド Culture and threads
カルチャおよびアプリケーションドメイン Culture and application domains
カルチャおよびタスクベースの非同期操作 Culture and task-based asynchronous operations
CultureInfo オブジェクトのシリアル化 CultureInfo object serialization
コントロールパネルのオーバーライド Control Panel overrides
代替並べ替え順序 Alternate sort orders
カルチャと Windows アプリCulture and Windows apps

カルチャ名と識別子Culture names and identifiers

CultureInfo クラスは、RFC 4646 に基づいて、カルチャごとに一意の名前を指定します。The CultureInfo class specifies a unique name for each culture, based on RFC 4646. 名前は、言語に関連付けられた ISO 639 2 文字の小文字カルチャコードと、国または地域に関連付けられている ISO 3166 2 文字の大文字サブカルチャコードを組み合わせたものです。The name is a combination of an ISO 639 two-letter lowercase culture code associated with a language and an ISO 3166 two-letter uppercase subculture code associated with a country or region. さらに、.NET Framework 4.NET Framework 4 以降を対象とし、Windows 10 以降で実行されているアプリでは、有効な BCP-47 言語タグに対応するカルチャ名がサポートされています。In addition, for apps that target .NET Framework 4.NET Framework 4 or later and are running under Windows 10 or later, culture names that correspond to valid BCP-47 language tags are supported.

注意

カルチャ名がクラスコンストラクターまたは CreateSpecificCultureCultureInfoなどのメソッドに渡される場合、その大文字と小文字は区別されません。When a culture name is passed to a class constructor or a method such as CreateSpecificCulture or CultureInfo, its case is not significant.

RFC 4646 に基づくカルチャ名の形式はlanguagecode2>-country/regioncode2です。ここで、 languagecode2は2文字の言語コード、 country/regioncode2は2文字のサブカルチャコードです。The format for the culture name based on RFC 4646 is languagecode2>-country/regioncode2, where languagecode2 is the two-letter language code and country/regioncode2 is the two-letter subculture code. たとえば、日本語 (日本) の場合は ja-jp、英語の場合は en-us (米国) が使用されます。Examples include ja-JP for Japanese (Japan) and en-US for English (United States). 2文字の言語コードが使用できない場合は、ISO 639-2 から派生した3文字のコードが使用されます。In cases where a two-letter language code is not available, a three-letter code derived from ISO 639-2 is used.

カルチャ名によっては、ISO 15924 スクリプトも指定されていることに注意してください。Note that some culture names also specify an ISO 15924 script. たとえば、Cyrl はキリルスクリプトを指定し、Latn は Latin スクリプトを指定します。For example, Cyrl specifies the Cyrillic script and Latn specifies the Latin script. スクリプトを含むカルチャ名は、pattern languagecode2-scripttag-country/regioncode2というパターンを使用します。A culture name that includes a script uses the pattern languagecode2-scripttag-country/regioncode2. この種類のカルチャ名の例として、uz-Cyrl-UZ (ウズベク語 (キリル、ウズベキスタン)) があります。An example of this type of culture name is uz-Cyrl-UZ for Uzbek (Cyrillic, Uzbekistan). Windows Vista より前の Windows オペレーティングシステムでは、スクリプトを含むカルチャ名は、 languagecode2-country/regioncode2-scripttagというパターンを使用します。たとえば、ウズベク語 (キリル、ウズベキスタンの場合は uz) を使用します。).On Windows operating systems before Windows Vista, a culture name that includes a script uses the pattern languagecode2-country/regioncode2-scripttag, for example, uz-UZ-Cyrl for Uzbek (Cyrillic, Uzbekistan).

ニュートラルカルチャは、2文字の小文字の言語コードによってのみ指定されます。A neutral culture is specified by only the two-letter lowercase language code. たとえば、fr はフランス語のニュートラルカルチャを指定し、de はドイツ語のニュートラルカルチャを指定します。For example, fr specifies the neutral culture for French, and de specifies the neutral culture for German.

注意

この規則に矛盾する2つのカルチャ名があります。There are two culture names that contradict this rule. カルチャ中国語 (簡体字)、zh-tw Hans、および繁体字中国語 (繁体字) は、ニュートラルカルチャです。The cultures Chinese (Simplified), named zh-Hans, and Chinese (Traditional), named zh-Hant, are neutral cultures. カルチャ名は現在の標準を表し、古い名前 zh-tw と zh-tw を使用する理由がない限り、使用する必要があります。The culture names represent the current standard and should be used unless you have a reason for using the older names zh-CHS and zh-CHT.

カルチャ識別子は、標準の国際数字の省略形であり、インストールされているカルチャの1つを一意に識別するために必要なコンポーネントを備えています。A culture identifier is a standard international numeric abbreviation and has the components necessary to uniquely identify one of the installed cultures. アプリケーションでは、定義済みのカルチャ識別子を使用することも、カスタム識別子を定義することもできます。Your application can use predefined culture identifiers or define custom identifiers.

特定の定義済みカルチャ名と識別子は、このクラスおよび System.Globalization 名前空間のその他のクラスによって使用されます。Certain predefined culture names and identifiers are used by this and other classes in the System.Globalization namespace. Windows システムの詳細なカルチャ情報については、 windows でサポートされている言語/地域名の一覧[言語タグ] 列を参照してください。For detailed culture information for Windows systems, see the Language tag column in the list of language/region names supported by Windows. カルチャ名は、BCP 47 によって定義されている標準に準拠します。Culture names follow the standard defined by BCP 47.

カルチャ名と識別子は、特定のコンピューターで検出できるカルチャのサブセットのみを表すことに注意してください。Remember that the culture names and identifiers represent only a subset of cultures that can be found on a particular computer. Windows のバージョンまたはサービスパックは、使用可能なカルチャを変更できます。Windows versions or service packs can change the available cultures. アプリケーションでは、CultureAndRegionInfoBuilder クラスを使用してカスタムカルチャを追加します。Applications add custom cultures using the CultureAndRegionInfoBuilder class. ユーザーは、Microsoft Locale Builder ツールを使用して、独自のカスタムカルチャを追加します。Users add their own custom cultures using the Microsoft Locale Builder tool. Microsoft Locale Builder は、CultureAndRegionInfoBuilder クラスを使用してマネージコードで記述されています。Microsoft Locale Builder is written in managed code using the CultureAndRegionInfoBuilder class.

いくつかの異なる名前は、特に次のクラスメンバーに関連付けられた名前というカルチャに密接に関連付けられています。Several distinct names are closely associated with a culture, notably the names associated with the following class members:

インバリアント、ニュートラル、および特定のカルチャInvariant, neutral, and specific cultures

カルチャは、通常、インバリアントカルチャ、ニュートラルカルチャ、および特定のカルチャという3つのセットにグループ化されています。The cultures are generally grouped into three sets: invariant cultures, neutral cultures, and specific cultures.

インバリアントカルチャは、カルチャに依存しません。An invariant culture is culture-insensitive. アプリケーションで、空の文字列 ("") またはその識別子を使用して、名前でインバリアントカルチャを指定します。Your application specifies the invariant culture by name using an empty string ("") or by its identifier. InvariantCulture は、インバリアントカルチャのインスタンスを定義します。InvariantCulture defines an instance of the invariant culture. 英語と関連付けられていますが、国/地域には関連付けられていません。It is associated with the English language but not with any country/region. これは、カルチャを必要とする Globalization 名前空間のほとんどすべてのメソッドで使用されます。It is used in almost any method in the Globalization namespace that requires a culture.

ニュートラルカルチャは、言語に関連付けられているが、国/地域に関連付けられていないカルチャです。A neutral culture is a culture that is associated with a language but not with a country/region. 特定のカルチャとは、言語および国/地域に関連付けられているカルチャです。A specific culture is a culture that is associated with a language and a country/region. たとえば、fr はフランス語のカルチャのニュートラル名で、fr-fr は特定のフランス語 (フランス) カルチャの名前です。For example, fr is the neutral name for the French culture, and fr-FR is the name of the specific French (France) culture. 中国語 (簡体字) と繁体字中国語は、ニュートラルカルチャとも見なされることに注意してください。Note that Chinese (Simplified) and Chinese (Traditional) are also considered neutral cultures.

ニュートラルカルチャの CompareInfo クラスのインスタンスを作成することはお勧めしません。含まれるデータは任意です。Creating an instance of a CompareInfo class for a neutral culture is not recommended because the data it contains is arbitrary. データの表示と並べ替えを行うには、言語と地域の両方を指定します。To display and sort data, specify both the language and region. また、ニュートラルカルチャ用に作成された CompareInfo オブジェクトの Name プロパティは、国のみを返し、地域は含まれません。Additionally, the Name property of a CompareInfo object created for a neutral culture returns only the country and does not include the region.

定義されたカルチャには、特定のカルチャの親がニュートラルカルチャであり、ニュートラルカルチャの親がインバリアントカルチャである階層があります。The defined cultures have a hierarchy in which the parent of a specific culture is a neutral culture and the parent of a neutral culture is the invariant culture. Parent プロパティには、特定のカルチャに関連付けられているニュートラルカルチャが含まれます。The Parent property contains the neutral culture associated with a specific culture. カスタムカルチャでは、このパターンに準拠して Parent プロパティを定義する必要があります。Custom cultures should define the Parent property in conformance with this pattern.

特定のカルチャのリソースがオペレーティングシステムで使用できない場合は、関連付けられているニュートラルカルチャのリソースが使用されます。If the resources for a specific culture are not available in the operating system, the resources for the associated neutral culture are used. ニュートラルカルチャのリソースが使用できない場合は、メインアセンブリに埋め込まれているリソースが使用されます。If the resources for the neutral culture are not available, the resources embedded in the main assembly are used. リソースフォールバックプロセスの詳細については、「リソースのパッケージ化と配置」を参照してください。For more information on the resource fallback process, see Packaging and Deploying Resources.

Windows API のロケールの一覧は、.NET Framework でサポートされているカルチャの一覧とは若干異なります。The list of locales in the Windows API is slightly different from the list of cultures supported by the .NET Framework. たとえば、p/invoke メカニズムを使用して Windows との相互運用性が必要な場合、アプリケーションでは、オペレーティングシステムに対して定義されている特定のカルチャを使用する必要があります。If interoperability with Windows is required, for example, through the p/invoke mechanism, the application should use a specific culture that is defined for the operating system. 特定のカルチャを使用すると、同等の Windows ロケールとの一貫性が確保されます。これは、LCIDと同じロケール識別子で識別されます。Use of the specific culture ensures consistency with the equivalent Windows locale, which is identified with a locale identifier that is the same as LCID.

DateTimeFormatInfo または NumberFormatInfo は、ニュートラルカルチャではなく、特定のカルチャに対してのみ作成できます。A DateTimeFormatInfo or a NumberFormatInfo can be created only for the invariant culture or for specific cultures, not for neutral cultures.

DateTimeFormatInfo.CalendarTaiwanCalendar で、Thread.CurrentCulture が zh-tw に設定されていない場合、DateTimeFormatInfo.NativeCalendarNameDateTimeFormatInfo.GetEraName、および DateTimeFormatInfo.GetAbbreviatedEraName は空の文字列 ("") を返します。If DateTimeFormatInfo.Calendar is the TaiwanCalendar but the Thread.CurrentCulture is not set to zh-TW, then DateTimeFormatInfo.NativeCalendarName, DateTimeFormatInfo.GetEraName, and DateTimeFormatInfo.GetAbbreviatedEraName return an empty string ("").

カスタムカルチャCustom cultures

Windows オペレーティングシステムと .NET Framework によってサポートされる定義済みのカルチャに加えて、.NET Framework は次の3種類のカスタムカルチャをサポートしています。In addition to the predefined cultures supported by the Windows operating system and the .NET Framework, the .NET Framework supports three types of custom cultures:

  • Windows または .NET Framework で使用できるカルチャを補完する新しいカルチャ。New cultures that supplement the cultures available in Windows or the .NET Framework. たとえば、アプリケーションでは、システム上の fj-fj (または Fijan (フィジー)) カルチャを表す CultureInfo オブジェクトをインストールできます。For example, an application could install a CultureInfo object that represents the fj-FJ (or Fijan (Fiji)) culture on a system.

  • Windows および .NET Framework でサポートされる標準カルチャのプロパティとは異なるプロパティを持つ置換カルチャ。Replacement cultures whose properties are different from the properties of the standard cultures supported by Windows and the .NET Framework.

  • ユーザーがオーバーライドする標準カルチャ。Standard cultures with user overrides. ユーザーは、コントロールパネル[地域と言語] アプリケーションを使用して、既存のカルチャのプロパティ値をカスタマイズできます。The user can use the Region and Language application in Control Panel to customize an existing culture's property values.

注意

CultureAndRegionInfoBuilder クラスを使用して、既存のカルチャを補完または置換するカスタムカルチャを定義、保存、および登録できます。You can use the CultureAndRegionInfoBuilder class to define, save, and register custom cultures that either supplement or replace existing cultures. CultureAndRegionInfoBuilder.Save メソッドは、ターゲットシステムにカスタムカルチャをインストールするために使用できるロケールデータマークアップ言語 (LDML) ファイルを作成します。The CultureAndRegionInfoBuilder.Save method creates a Locale Data Markup Language (LDML) file that can be used to install a custom culture on target systems. CultureAndRegionInfoBuilder クラスを使用して新しいまたは置換カルチャを作成する方法の詳細な手順については、CultureAndRegionInfoBuilder クラスのトピックを参照してください。For step-by step information on using the CultureAndRegionInfoBuilder class to create a new or replacement culture, see the CultureAndRegionInfoBuilder class topic.

.NET Framework ではカスタムカルチャがサポートされるため、カルチャ固有のデータを使用する場合は、次の点を考慮する必要があります。Because the .NET Framework supports custom cultures, you should consider the following when working with culture-specific data:

  • カスタムカルチャは、定義済みのカルチャの範囲を超える値を持つことができます。Custom cultures can have values that exceed the ranges of the predefined cultures. たとえば、一部のカルチャでは、月の名前が異常に長い、予期しない日付または時刻の形式、またはその他の特殊なデータがあります。For example, some cultures have unusually long month names, unexpected date or time formats, or other unusual data.

  • カルチャ固有のデータをユーザーインターフェイスに表示する場合は、ユーザーのカスタマイズを尊重する必要があります。たとえば、ユーザーが24時間制または yyyyMMdd 日付形式を使用する場合があります。When you display culture-specific data in the user interface, you should respect the user's customizations; for example, the user might want a 24-hour clock or a yyyyMMdd date format.

  • カスタムカルチャは既定値をオーバーライドすることに注意してください。Remember that custom cultures override default values. したがって、カルチャデータを安定させることはできません。Therefore, you cannot consider culture data to be stable. 将来、国名、数字と日付の形式、およびスペルが変わる可能性があります。Country names, number and date formats, and spellings may change in the future. 日付や時刻の文字列など、カルチャに依存するデータをシリアル化して、日付と時刻の解析関数に渡す場合は、インバリアントカルチャまたは特定のを使用する必要があります。If you want to serialize culture-sensitive data such as date and time strings to be passed to the date and time parsing functions, you should use the invariant culture or a specific .

システムにインストールされているカスタムカルチャの CultureTypes プロパティ値には、System.Globalization.CultureTypes フラグが含まれ、カスタムカルチャには LOCALE_CUSTOM_UNSPECIFIED (0x1000 または 4096) の LCID プロパティ値が割り当てられます。The CultureTypes property value of custom cultures installed on a system includes the System.Globalization.CultureTypes flag, and custom cultures are assigned an LCID property value of LOCALE_CUSTOM_UNSPECIFIED (0x1000, or 4096). Windows 10 以降では、この値は、完全なカルチャデータを持たないシステム定義のカルチャにも割り当てられることに注意してください。Note that, starting with Windows 10, this value is also assigned to system-defined cultures that lack complete cultural data.

CultureInfo と文化のデータCultureInfo and cultural data

.NET は、実装、プラットフォーム、およびバージョンに応じて、さまざまなソースからカルチャデータを派生させることができます。.NET derives its cultural data from a one of a variety of sources, depending on implementation, platform, and version:

  • .NET Framework 3.5 以前のバージョンでは、カルチャデータは、Windows オペレーティングシステムと .NET Framework の両方によって提供されます。In .NET Framework 3.5 and earlier versions, cultural data is provided by both the Windows operating system and the .NET Framework.

  • .NET Framework 4 以降のバージョンでは、カルチャデータは Windows オペレーティングシステムによって提供されます。In .NET Framework 4 and later versions, cultural data is provided by the Windows operating system.

  • Windows で実行されている .NET Core のすべてのバージョンでは、Windows オペレーティングシステムによってカルチャデータが提供されます。In all versions of .NET Core running on Windows, cultural data is provided by the Windows operating system.

  • Unix プラットフォームで実行されている .NET Core のすべてのバージョンでは、 International Components For Unicode (ICU) ライブラリによってカルチャデータが提供されます。In all versions of .NET Core running on Unix platforms, cultural data is provided by the International Components for Unicode (ICU) Library. ICU ライブラリの特定のバージョンは、個々のオペレーティングシステムによって異なります。The specific version of the ICU Library depends on the individual operating system.

このため、特定の .NET 実装、プラットフォーム、またはバージョンで使用できるカルチャは、別の .NET 実装、プラットフォーム、またはバージョンでは使用できない場合があります。Because of this, a culture available on a particular .NET implementation, platform, or version may not be available on a different .NET implementation, platform, or version.

一部の CultureInfo オブジェクトは、基になるプラットフォームによって異なります。Some CultureInfo objects differ depending on the underlying platform. 特に、"zh-tw"、または中国語 (簡体字、中国) と zh-tw、または中国語 (繁体字、台湾) は、Windows システムでは使用できますが、Unix システムではエイリアス化されたカルチャです。In particular, "zh-CN", or Chinese (Simplified, China) and zh-TW, or Chinese (Traditional, Taiwan), are available cultures on Windows systems, but they are aliased cultures on Unix systems. "zh-tw" は "zh-tw" カルチャのエイリアスであり、"zh-tw-TW" は "zh-tw-Zh-hant" カルチャのエイリアスとして使用されます。"zh-CN" is an alias for the "zh-Hans-CN" culture, and "zh-TW" is an alias for the "zh-Hant-TW" culture. エイリアス化されたカルチャは、GetCultures メソッドの呼び出しによって返されることはなく、Windows の対応するカルチャとは異なる Parent カルチャを含む異なるプロパティ値を持つ場合があります。Aliased cultures are not returned by calls to the GetCultures method and may have different property values, including different Parent cultures, than their Windows counterparts. Zh-tw と zh-tw のカルチャでは、次のような違いがあります。For the zh-CN and zh-TW cultures, these differenes include the following:

  • Windows システムでは、"zh-tw" カルチャの親カルチャは "zh-tw-Hans" であり、"zh-tw" カルチャの親カルチャは "zh-tw-Zh-hant" です。On Windows systems, the parent culture of the "zh-CN" culture is "zh-Hans", and the parent culture of the "zh-TW" culture is "zh-Hant". これらのカルチャの親カルチャは、両方とも "zh-tw" です。The parent culture of both these cultures is "zh". Unix システムでは、両方のカルチャの親は "zh-tw" です。On Unix systems, the parents of both cultures are "zh". これは、"zh-tw" または "zh-tw" カルチャのカルチャ固有のリソースを提供しないが、ニュートラルな "zh-tw-Hans" または "zh-tw" カルチャのリソースを提供する場合、アプリケーションは、ニュートラルカルチャのリソースを Windows に読み込みますが、Unix 上には読み込まないことを意味します。This means that, if you don't provide culture-specific resources for the "zh-CN" or "zh-TW" cultures but do provide a resources for the neutral "zh-Hans" or "zh-Hant" culture, your application will load the resources for the neutral culture on Windows but not on Unix. Unix システムでは、スレッドの CurrentUICulture を "zh-tw-Hans" または "zh-tw-Zh-hant" に明示的に設定する必要があります。On Unix systems, you must explicitly set the thread's CurrentUICulture to either "zh-Hans" or "zh-Hant".

  • Windows システムでは、"zh-tw" カルチャを表すインスタンスで CultureInfo.Equals を呼び出し、それに "zh-tw-Hans" インスタンスを渡すと、trueが返されます。On Windows systems, calling CultureInfo.Equals on an instance that represents the "zh-CN" culture and passing it a "zh-Hans-CN" instance returns true. Unix システムでは、メソッドの呼び出しによって falseが返されます。On Unix systems, the method call returns false. この動作は、"zh-tw" CultureInfo インスタンスで Equals を呼び出し、それに "zh-tw-Zh-hant" インスタンスを渡す場合にも当てはまります。This behavior also applies to calling Equals on a "zh-TW" CultureInfo instance and passing it a "zh-Hant-Tw" instance.

動的なカルチャデータDynamic culture data

インバリアントカルチャを除き、カルチャデータは動的です。Except for the invariant culture, culture data is dynamic. これは、定義済みのカルチャに対しても当てはまります。This is true even for the predefined cultures. たとえば、国または地域で新しい通貨を採用したり、単語のスペルを変更したり、優先する暦を変更したり、カルチャの定義を変更してこれを追跡したりします。For example, countries or regions adopt new currencies, change their spellings of words, or change their preferred calendar, and culture definitions change to track this. カスタムカルチャは予告なしに変更される可能性があり、特定のカルチャはカスタムの置換カルチャによってオーバーライドされることがあります。Custom cultures are subject to change without notice, and any specific culture might be overridden by a custom replacement culture. また、以下で説明するように、個々のユーザーはカルチャ設定をオーバーライドできます。Also, as discussed below, an individual user can override cultural preferences. アプリケーションでは、常に実行時にカルチャデータを取得する必要があります。Applications should always obtain culture data at run time.

注意事項

データを保存する場合は、アプリケーションでインバリアントカルチャ、バイナリ形式、または特定のカルチャに依存しない形式を使用する必要があります。When saving data, your application should use the invariant culture, a binary format, or a specific culture-independent format. インバリアントカルチャ以外の特定のカルチャに関連付けられている現在の値に従って保存されたデータは読み取り不能になるか、またはそのカルチャが変更された場合に意味が変化する可能性があります。Data saved according to the current values associated with a particular culture, other than the invariant culture, might become unreadable or might change in meaning if that culture changes.

現在のカルチャと現在の UI カルチャThe current culture and current UI culture

.NET アプリケーションのすべてのスレッドには、現在のカルチャと現在の UI カルチャがあります。Every thread in a .NET application has a current culture and a current UI culture. 現在のカルチャでは、日付、時刻、数値、通貨値の書式指定規則、テキストの並べ替え順序、大文字小文字の規則、および文字列を比較する方法が決定されます。The current culture determines the formatting conventions for dates, times, numbers, and currency values, the sort order of text, casing conventions, and the ways in which strings are compared. 現在の UI カルチャは、実行時にカルチャ固有のリソースを取得するために使用されます。The current UI culture is used to retrieve culture-specific resources at runtime.

注意

現在の UI カルチャと現在の UI カルチャがスレッドごとにどのように決定されるかについては、「カルチャとスレッド」セクションを参照してください。For information on how the current and current UI culture is determined on a per-thread basis, see the Culture and threads section. 新しいアプリケーションドメインで実行されるスレッドと、アプリケーションドメインの境界を越えるスレッドで現在および現在の UI カルチャがどのように決定されるかについては、「カルチャとアプリケーションドメイン」を参照してください。For information on how the current and current UI culture is determined on threads executing in a new application domain, and on threads that cross application domain boundaries, see the Culture and application domains section. タスクベースの非同期操作を実行するスレッドで現在のと現在のがどのように決定されるかについては、「カルチャとタスクベースの非同期操作」セクションを参照してください。For information on how the current and current is determined on threads performing task-based asynchronous operations, see the Culture and task-based asynchronous operations section.

現在のカルチャの詳細については、CultureInfo.CurrentCulture プロパティに関するトピックを参照してください。For more detailed information on the current culture, see the CultureInfo.CurrentCulture property topic. 現在の UI カルチャの詳細については、CultureInfo.CurrentUICulture プロパティに関するトピックを参照してください。For more detailed information on the current UI culture, see the CultureInfo.CurrentUICulture property topic.

現在の UI カルチャと現在の UI カルチャを取得するRetrieving the current and current UI cultures

現在のカルチャを表す CultureInfo オブジェクトは、次の2つの方法のいずれかで取得できます。You can get a CultureInfo object that represents the current culture in either of two ways:

次の例では、両方のプロパティ値を取得し、それらが等しいと表示されるように比較し、現在のカルチャの名前を表示します。The following example retrieves both property values, compares them to show that they are equal, and displays the name of the current culture.

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
Imports System.Globalization
Imports System.Threading

Module Example
   Public Sub Main()
      Dim culture1 As CultureInfo = CultureInfo.CurrentCulture
      Dim culture2 As CultureInfo = Thread.CurrentThread.CurrentCulture
      Console.WriteLine("The current culture is {0}", culture1.Name)
      Console.WriteLine("The two CultureInfo objects are equal: {0}",
                        culture1.Equals(culture2))
   End Sub
End Module
' The example displays output like the following:
'     The current culture is en-US
'     The two CultureInfo objects are equal: True

現在の UI カルチャを表す CultureInfo オブジェクトは、次の2つの方法のいずれかで取得できます。You can get a CultureInfo object that represents the current UI culture in either of two ways:

次の例では、両方のプロパティ値を取得し、それらが等しいと表示されるように比較し、現在の UI カルチャの名前を表示します。The following example retrieves both property values, compares them to show that they are equal, and displays the name of the current UI culture.

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
Imports System.Globalization
Imports System.Threading

Module Example
   Public Sub Main()
      Dim uiCulture1 As CultureInfo = CultureInfo.CurrentUICulture
      Dim uiCulture2 As CultureInfo = Thread.CurrentThread.CurrentUICulture
      Console.WriteLine("The current UI culture is {0}", uiCulture1.Name)
      Console.WriteLine("The two CultureInfo objects are equal: {0}",
                        uiCulture1.Equals(uiCulture2))
   End Sub
End Module
' The example displays output like the following:
'     The current UI culture is en-US
'     The two CultureInfo objects are equal: True

現在の UI カルチャと現在の UI カルチャの設定Setting the current and current UI cultures

スレッドのカルチャと UI カルチャを変更するには、次の手順を実行します。To change the culture and UI culture of a thread, do the following:

  1. CultureInfo クラスコンストラクターを呼び出し、カルチャの名前を渡すことによって、そのカルチャを表す CultureInfo オブジェクトをインスタンス化します。Instantiate a CultureInfo object that represents that culture by calling a CultureInfo class constructor and passing it the name of the culture. CultureInfo(String) コンストラクターは、新しいカルチャが現在の Windows カルチャと同じである場合に、ユーザーオーバーライドを反映する CultureInfo オブジェクトをインスタンス化します。The CultureInfo(String) constructor instantiates a CultureInfo object that reflects user overrides if the new culture is the same as the current Windows culture. CultureInfo(String, Boolean) コンストラクターを使用すると、新しいカルチャが現在の Windows カルチャと同じ場合に、新しくインスタンス化された CultureInfo オブジェクトにユーザーオーバーライドを反映するかどうかを指定できます。The CultureInfo(String, Boolean) constructor allows you to specify whether the newly instantiated CultureInfo object reflects user overrides if the new culture is the same as the current Windows culture.

  2. CultureInfo オブジェクトを .NET Core の CultureInfo.CurrentCulture または CultureInfo.CurrentUICulture プロパティに割り当てるか、4.6 以降のバージョンを .NET Framework します。Assign the CultureInfo object to the CultureInfo.CurrentCulture or CultureInfo.CurrentUICulture property on .NET Core and .NET Framework 4.6 and later versions. (.NET Framework 4.5.2 以前のバージョンでは、CultureInfo オブジェクトを Thread.CurrentCulture または Thread.CurrentUICulture プロパティに割り当てます)。(On .NET Framework 4.5.2 and earlier versions, youc an assign the CultureInfo object to the Thread.CurrentCulture or Thread.CurrentUICulture property.)

次の例では、現在のカルチャを取得します。The following example retrieves the current culture. フランス語 (フランス) カルチャ以外の場合は、現在のカルチャをフランス語 (フランス) に変更します。If it is anything other than the French (France) culture, it changes the current culture to French (France). それ以外の場合は、現在のカルチャをフランス語 (ルクセンブルク) に変更します。Otherwise, it changes the current culture to French (Luxembourg).

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
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim current As CultureInfo = CultureInfo.CurrentCulture
      Console.WriteLine("The current culture is {0}", current.Name)
      Dim newCulture As CultureInfo
      If current.Name.Equals("fr-FR") Then
         newCulture = New CultureInfo("fr-LU")
      Else   
         newCulture = new CultureInfo("fr-FR")
      End If
      
      CultureInfo.CurrentCulture = newCulture
      Console.WriteLine("The current culture is now {0}", 
                        CultureInfo.CurrentCulture.Name)   
   End Sub
End Module
' The example displays output like the following:
'     The current culture is en-US
'     The current culture is now fr-FR

次の例では、現在のカルチャを取得します。The following example retrieves the current culture. 他のスロベニア語 (スロベニア) カルチャである場合は、現在のカルチャをスロベニア語 (スロベニア) に変更します。If it is anything other the Slovenian (Slovenia) culture, it changes the current culture to Slovenian (Slovenia). それ以外の場合は、現在のカルチャをクロアチア語 (クロアチア) に変更します。Otherwise, it changes the current culture to Croatian (Croatia).

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
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim current As CultureInfo = CultureInfo.CurrentUICulture
      Console.WriteLine("The current UI culture is {0}", current.Name)
      Dim newUICulture As CultureInfo
      If current.Name.Equals("sl-SI") Then
         newUICulture = New CultureInfo("hr-HR")
      Else   
         newUICulture = new CultureInfo("sl-SI")
      End If
      
      CultureInfo.CurrentUICulture = newUICulture
      Console.WriteLine("The current UI culture is now {0}", 
                        CultureInfo.CurrentUICulture.Name)   
   End Sub
End Module
' The example displays output like the following:
'     The current UI culture is en-US
'     The current UI culture is now sl-SI

すべてのカルチャを取得するGetting all cultures

GetCultures メソッドを呼び出すことにより、カルチャの配列固有のカテゴリ、またはローカルコンピューターで使用可能なすべてのカルチャの配列を取得できます。You can retrieve an array specific categories of cultures or of all the cultures available on the local computer by calling the GetCultures method. たとえば、カスタムカルチャ、特定のカルチャ、またはニュートラルカルチャを単独で、または組み合わせて取得できます。For example, you can retrieve custom cultures, specific cultures, or neutral cultures either alone or in combination.

次の例では、GetCultures メソッドを2回呼び出します。最初に、System.Globalization.CultureTypes 列挙体メンバーを使用してすべてのカスタムカルチャを取得し、次に System.Globalization.CultureTypes 列挙体メンバーを使用してすべての置換カルチャを取得します。The following example calls the GetCultures method twice, first with the System.Globalization.CultureTypes enumeration member to retrieve all custom cultures, and then with the System.Globalization.CultureTypes enumeration member to retrieve all replacement cultures.

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.
Imports System.Globalization

Module Example
   Public Sub Main()
      ' Get all custom cultures.
      Dim custom() As CultureInfo = CultureInfo.GetCultures(CultureTypes.UserCustomCulture)
      If custom.Length = 0 Then 
         Console.WriteLine("There are no user-defined custom cultures.")
      Else
         Console.WriteLine("Custom cultures:")
         For Each culture In custom 
            Console.WriteLine("   {0} -- {1}", culture.Name, culture.DisplayName)
         Next       
      End If
      Console.WriteLine()
      
      ' Get all replacement cultures.
      Dim replacements() As CultureInfo = CultureInfo.GetCultures(CultureTypes.ReplacementCultures)
      If replacements.Length = 0 Then 
         Console.WriteLine("There are no replacement cultures.")
      Else 
         Console.WriteLine("Replacement cultures:")
         For Each culture in replacements 
            Console.WriteLine("   {0} -- {1}", culture.Name, culture.DisplayName)    
         Next
      End If
      Console.WriteLine()
   End Sub
End Module
' 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.

カルチャとスレッドCulture and threads

新しいアプリケーションスレッドが開始されると、現在のカルチャと現在の UI カルチャは、現在のシステムカルチャによって定義され、現在のスレッドカルチャによっては定義されません。When a new application thread is started, its current culture and current UI culture are defined by the current system culture, and not by the current thread culture. この違いを次の例に示します。The following example illustrates the difference. 現在のカルチャと、アプリケーションスレッドの現在の UI カルチャをフランス語 (フランス) カルチャ (fr-fr) に設定します。It sets the current culture and current UI culture of an application thread to the French (France) culture (fr-FR). 現在のカルチャが既に fr-fr の場合、この例では英語 (米国) カルチャ (en-us) に設定します。If the current culture is already fr-FR, the example sets it to the English (United States) culture (en-US). 通貨値として3つの乱数が表示され、新しいスレッドが作成されます。これにより、3つの乱数が通貨値として表示されます。It displays three random numbers as currency values and then creates a new thread, which, in turn, displays three more random numbers as currency values. ただし、この例の出力に示されているように、新しいスレッドによって表示される通貨値には、メインアプリケーションスレッドからの出力とは異なり、フランス語 (フランス) カルチャの書式指定規則が反映されていません。But as the output from the example shows, the currency values displayed by the new thread do not reflect the formatting conventions of the French (France) culture, unlike the output from the main application thread.

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
Imports System.Globalization
Imports System.Threading

Module Example
   Dim rnd As New Random()
   
   Public Sub Main()
      If Thread.CurrentThread.CurrentCulture.Name <> "fr-FR" Then
         ' 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")
      End If
      ThreadProc()
          
       Dim worker As New Thread(AddressOf ThreadProc)
       worker.Name = "WorkerThread"
       worker.Start()
   End Sub
   
   Private Sub DisplayThreadInfo()
      Console.WriteLine()
      Console.WriteLine("Current Thread Name: '{0}'", 
                        Thread.CurrentThread.Name)
      Console.WriteLine("Current Thread Culture/UI Culture: {0}/{1}", 
                        Thread.CurrentThread.CurrentCulture.Name,
                        Thread.CurrentThread.CurrentUICulture.Name)                        
   End Sub
   
   Private Sub DisplayValues()
      ' Create new thread and display three random numbers.
      Console.WriteLine("Some currency values:")
      For ctr As Integer = 0 To 3
         Console.WriteLine("   {0:C2}", rnd.NextDouble() * 10)                        
      Next
   End Sub
   
   Private Sub ThreadProc()
      DisplayThreadInfo()
      DisplayValues()
   End Sub
End Module
' 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 4.5.NET Framework 4.5前の .NET Framework のバージョンでは、メインアプリケーションスレッドが他のすべてのワーカースレッドと同じカルチャを共有するための最も一般的な方法は、アプリケーション全体のカルチャの名前、またはを表す CultureInfo オブジェクトのいずれかを渡すことです。System.Threading.ParameterizedThreadStart デリゲートに対するアプリケーション全体のカルチャ。In versions of the .NET Framework before the .NET Framework 4.5.NET Framework 4.5, the most common way to ensure that the main application thread shares the same culture with all other worker threads is to pass either the name of the application-wide culture or a CultureInfo object that represents the application-wide culture to a System.Threading.ParameterizedThreadStart delegate. 次の例では、この方法を使用して、2つのスレッドによって表示される通貨値が、同じカルチャの書式指定規則を反映するようにしています。The following example uses this approach to ensure that the currency values displayed by two threads reflect the formatting conventions of the same culture.

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 €
Imports System.Globalization
Imports System.Threading

Module Example
   Dim rnd As New Random()
   
   Public Sub Main()
      If Thread.CurrentThread.CurrentCulture.Name <> "fr-FR" Then
         ' 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")
      End If
      DisplayThreadInfo()
      DisplayValues()
          
       Dim worker As New Thread(AddressOf ThreadProc)
       worker.Name = "WorkerThread"
       worker.Start(Thread.CurrentThread.CurrentCulture)
   End Sub
   
   Private Sub DisplayThreadInfo()
      Console.WriteLine()
      Console.WriteLine("Current Thread Name: '{0}'", 
                        Thread.CurrentThread.Name)
      Console.WriteLine("Current Thread Culture/UI Culture: {0}/{1}", 
                        Thread.CurrentThread.CurrentCulture.Name,
                        Thread.CurrentThread.CurrentUICulture.Name)                        
   End Sub
   
   Private Sub DisplayValues()
      ' Create new thread and display three random numbers.
      Console.WriteLine("Some currency values:")
      For ctr As Integer = 0 To 3
         Console.WriteLine("   {0:C2}", rnd.NextDouble() * 10)                        
      Next
   End Sub
   
   Private Sub ThreadProc(obj As Object)
      Thread.CurrentThread.CurrentCulture = CType(obj, CultureInfo)
      Thread.CurrentThread.CurrentUICulture = CType(obj, CultureInfo)
      DisplayThreadInfo()
      DisplayValues()
   End Sub
End Module
' 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) メソッドを呼び出すことによって同様の方法で設定できます。You can set the culture and UI culture of thread pool threads in a similar manner by calling the ThreadPool.QueueUserWorkItem(WaitCallback, Object) method.

.NET Framework 4.5.NET Framework 4.5以降では、そのカルチャを表す CultureInfo オブジェクトを DefaultThreadCurrentCulture および DefaultThreadCurrentUICulture プロパティに割り当てることにより、アプリケーションドメイン内のすべてのスレッドのカルチャと UI カルチャをより直接的に設定できます。Starting with the .NET Framework 4.5.NET Framework 4.5, you can set the culture and UI culture of all threads in an application domain more directly by assigning a CultureInfo object that represents that culture to the DefaultThreadCurrentCulture and DefaultThreadCurrentUICulture properties. 次の例では、これらのプロパティを使用して、既定のアプリケーションドメイン内のすべてのスレッドが同じカルチャを共有するようにしています。The following example uses these properties to ensure that all threads in the default application domain share the same culture.

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 €
Imports System.Globalization
Imports System.Threading

Module Example
   Dim rnd As New Random()
   
   Public Sub Main()
      If Thread.CurrentThread.CurrentCulture.Name <> "fr-FR" Then
         ' 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")
      End If
      ThreadProc()

       Dim worker As New Thread(AddressOf ThreadProc)
       worker.Name = "WorkerThread"
       worker.Start()
   End Sub
   
   Private Sub DisplayThreadInfo()
      Console.WriteLine()
      Console.WriteLine("Current Thread Name: '{0}'", 
                        Thread.CurrentThread.Name)
      Console.WriteLine("Current Thread Culture/UI Culture: {0}/{1}", 
                        Thread.CurrentThread.CurrentCulture.Name,
                        Thread.CurrentThread.CurrentUICulture.Name)                        
   End Sub
   
   Private Sub DisplayValues()
      ' Create new thread and display three random numbers.
      Console.WriteLine("Some currency values:")
      For ctr As Integer = 0 To 3
         Console.WriteLine("   {0:C2}", rnd.NextDouble() * 10)                        
      Next
   End Sub
   
   Private Sub ThreadProc()
      DisplayThreadInfo()
      DisplayValues()
   End Sub
End Module
' 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 €

警告

DefaultThreadCurrentCulture プロパティと DefaultThreadCurrentUICulture プロパティは静的メンバーですが、既定のカルチャと既定の UI カルチャは、これらのプロパティ値が設定された時点で最新のアプリケーションドメインに対してのみ定義されます。Although the DefaultThreadCurrentCulture and DefaultThreadCurrentUICulture properties are static members, they define the default culture and default UI culture only for the application domain that is current at the time these property values are set. 詳細については、次の「カルチャとアプリケーションドメイン」を参照してください。For more information, see the next section, Culture and application domains.

DefaultThreadCurrentCultureDefaultThreadCurrentUICulture のプロパティに値を割り当てると、アプリケーションドメイン内のスレッドのカルチャと UI カルチャも、カルチャが明示的に割り当てられていない場合は変更されます。When you assign values to the DefaultThreadCurrentCulture and DefaultThreadCurrentUICulture properties, the culture and UI culture of the threads in the application domain also change if they have not explicitly been assigned a culture. ただし、これらのスレッドは、現在のアプリケーションドメインでの実行中にのみ、新しいカルチャ設定を反映します。However, these threads reflect the new culture settings only while they execute in the current application domain. これらのスレッドが別のアプリケーションドメインで実行される場合、そのカルチャは、そのアプリケーションドメインに対して定義されている既定のカルチャになります。If these threads execute in another application domain, their culture becomes the default culture defined for that application domain. そのため、常にメインアプリケーションスレッドのカルチャを設定することをお勧めします。これは、DefaultThreadCurrentCultureDefaultThreadCurrentUICulture プロパティに依存せずに変更することをお勧めします。As a result, we recommend that you always set the culture of the main application thread, and not rely on the DefaultThreadCurrentCulture and DefaultThreadCurrentUICulture properties to change it.

カルチャとアプリケーションドメインCulture and application domains

DefaultThreadCurrentCultureDefaultThreadCurrentUICulture は、プロパティ値が設定または取得されたときに現在のアプリケーションドメインに対してのみ既定のカルチャを明示的に定義する静的プロパティです。DefaultThreadCurrentCulture and DefaultThreadCurrentUICulture are static properties that explicitly define a default culture only for the application domain that is current when the property value is set or retrieved. 次の例では、既定のカルチャと既定の UI カルチャを既定のアプリケーションドメインのフランス語 (フランス) に設定し、次に、AppDomainSetup クラスと AppDomainInitializer デリゲートを使用して、新しいアプリケーションドメインの既定のカルチャと UI カルチャをロシア語に設定します (ロシア)。The following example sets the default culture and default UI culture in the default application domain to French (France), and then uses the AppDomainSetup class and the AppDomainInitializer delegate to set the default culture and UI culture in a new application domain to Russian (Russia). 次に、1つのスレッドが各アプリケーションドメインで2つのメソッドを実行します。A single thread then executes two methods in each application domain. スレッドのカルチャと UI カルチャが明示的に設定されていないことに注意してください。これらは、スレッドが実行されているアプリケーションドメインの既定のカルチャおよび UI カルチャから派生します。Note that the thread's culture and UI culture are not explicitly set; they are derived from the default culture and UI culture of the application domain in which the thread is executing. また、DefaultThreadCurrentCulture プロパティと DefaultThreadCurrentUICulture プロパティは、メソッド呼び出しが行われたときに現在のアプリケーションドメインの既定の CultureInfo 値を返すことにも注意してください。Note also that the DefaultThreadCurrentCulture and DefaultThreadCurrentUICulture properties return the default CultureInfo values of the application domain that is current when the method call is made.

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
Imports System.Globalization
Imports System.Reflection
Imports System.Threading

Module Example
   Public Sub Main()
      ' Set the default culture and display the current date in the current application domain.
      Dim info1 As New Info()
      SetAppDomainCultures("fr-FR")
      
      ' Create a second application domain.
      Dim setup As New AppDomainSetup()
      setup.AppDomainInitializer = AddressOf SetAppDomainCultures
      setup.AppDomainInitializerArguments = { "ru-RU" }
      Dim domain As AppDomain = AppDomain.CreateDomain("Domain2", Nothing, setup)
      ' Create an Info object in the new application domain.
      Dim info2 As Info = CType(domain.CreateInstanceAndUnwrap(GetType(Example).Assembly.FullName, 
                                                               "Info"), Info) 

      ' Execute methods in the two application domains.
      info2.DisplayDate()
      info2.DisplayCultures()
      
      info1.DisplayDate()
      info1.DisplayCultures()            
   End Sub
   
   Public Sub SetAppDomainCultures(names() As String)
      SetAppDomainCultures(names(0))
   End Sub
   
   Public Sub SetAppDomainCultures(name As String)
       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 e As CultureNotFoundException
         Return
      Catch e As ArgumentException
         Return
      End Try      
   End Sub
End Module

Public Class Info : Inherits MarshalByRefObject
   Public Sub DisplayDate()
      Console.WriteLine("Today is {0:D}", Date.Now)
   End Sub
   
   Public Sub 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)
   End Sub
End Class
' 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

カルチャとアプリケーションドメインの詳細については、「アプリケーションドメイン」トピックの「アプリケーションドメインとスレッド」セクションを参照してください。For more information about cultures and application domains, see the "Application Domains and Threads" section in the Application Domains topic.

カルチャとタスクベースの非同期操作Culture and task-based asynchronous operations

タスクベースの非同期プログラミングパターンでは、Task オブジェクトと Task<TResult> オブジェクトを使用して、スレッドプールのスレッドでデリゲートを非同期的に実行します。The task-based asynchronous programming pattern uses Task and Task<TResult> objects to asynchronously execute delegates on thread pool threads. 特定のタスクが実行される特定のスレッドは事前にわからないが、実行時にのみ決定されます。The specific thread on which a particular task runs is not known in advance, but is determined only at runtime.

.NET Framework 4.6.NET Framework 4.6 以降のバージョンを対象とするアプリの場合、カルチャは非同期操作のコンテキストの一部になります。For apps that target the .NET Framework 4.6.NET Framework 4.6 or later versions, culture is part of an asynchronous operation's context. つまり、.NET Framework 4.6.NET Framework 4.6を対象とするアプリから、既定では、非同期操作は、起動元のスレッドの CurrentCultureCurrentUICulture プロパティの値を継承します。In other words, starting with apps that target the .NET Framework 4.6.NET Framework 4.6, asynchronous operations by default inherit the values of the CurrentCulture and CurrentUICulture properties of the thread from which they are launched. 現在のカルチャまたは現在の UI カルチャがシステムカルチャと異なる場合、現在のカルチャはスレッド境界を越えて、非同期操作を実行しているスレッドプールスレッドの現在のカルチャになります。If the current culture or current UI culture differs from the system culture, the current culture crosses thread boundaries and becomes the current culture of the thread pool thread that is executing an asynchronous operation.

簡単な例を次に示します。The following example provides a simple illustration. TargetFrameworkAttribute 属性を使用して、.NET Framework 4.6.NET Framework 4.6をターゲットにします。It uses the TargetFrameworkAttribute attribute to target the .NET Framework 4.6.NET Framework 4.6. この例では、通貨値として書式設定された数値を返す Func<TResult> デリゲート formatDelegateを定義しています。The example defines a Func<TResult> delegate, formatDelegate, that returns some numbers formatted as currency values. この例では、現在のシステムカルチャをフランス語 (フランス) に変更するか、フランス語 (フランス) が既に現在のカルチャである場合は英語 (米国) に変更します。The example changes the current system culture to either French (France) or, if French (France) is already the current culture, English (United States). 次のようになります。It then:

  • メインアプリスレッドで同期的に実行されるように、デリゲートを直接呼び出します。Invokes the delegate directly so that it runs synchronously on the main app thread.

  • スレッドプールのスレッドでデリゲートを非同期的に実行するタスクを作成します。Creates a task that executes the delegate asynchronously on a thread pool thread.

  • Task.RunSynchronously メソッドを呼び出すことによって、メインアプリスレッド上でデリゲートを同期的に実行するタスクを作成します。Creates a task that executes the delegate synchronously on the main app thread by calling the Task.RunSynchronously method.

この例の出力に示すように、現在のカルチャがフランス語 (フランス) に変更されると、タスクが非同期に呼び出されるスレッドの現在のカルチャが、非同期操作の現在のカルチャになります。As the output from the example shows, when the current culture is changed to French (France), the current culture of the thread from which tasks are invoked asynchronously becomes the current culture for that asynchronous operation.

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 €
Imports System.Globalization
Imports System.Runtime.Versioning
Imports System.Threading
Imports System.Threading.Tasks

<Assembly:TargetFramework(".NETFramework,Version=v4.6")>

Module Example
   Public Sub Main()
       Dim values() As Decimal = { 163025412.32d, 18905365.59d }
       Dim formatString As String = "C2"
       Dim formatDelegate As Func(Of String) = Function()
                                                  Dim output As String = String.Format("Formatting using the {0} culture on thread {1}.",
                                                                                       CultureInfo.CurrentCulture.Name,
                                                                                       Thread.CurrentThread.ManagedThreadId)
                                                  output += Environment.NewLine
                                                  For Each value In values
                                                     output += String.Format("{0}   ", value.ToString(formatString))
                                                  Next 
                                                  output += Environment.NewLine
                                                  Return output
                                               End Function
       
       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" Then
          Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US")
       Else
          Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR")
       End If
       Console.WriteLine("Changed the current culture to {0}.",
                         CultureInfo.CurrentCulture.Name)
       Console.WriteLine()                  
       
       ' 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:") 
       Dim t1 = Task.Run(formatDelegate)
       Console.WriteLine(t1.Result)
       
       Console.WriteLine("Executing a task synchronously:")
       Dim t2 = New Task(Of String)(formatDelegate) 
       t2.RunSynchronously()
       Console.WriteLine(t2.Result)
   End Sub
End Module
' 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 Imports the fr-FR culture on thread 1.
'          163 025 412,32 €   18 905 365,59 €
'
'          Executing a task asynchronously:
'          Formatting Imports the fr-FR culture on thread 3.
'          163 025 412,32 €   18 905 365,59 €
'
'          Executing a task synchronously:
'          Formatting Imports the fr-FR culture on thread 1.
'          163 025 412,32 €   18 905 365,59 €

.NET Framework 4.6.NET Framework 4.6より前のバージョンの .NET Framework を対象とするアプリ、または特定のバージョンの .NET Framework を対象としないアプリの場合、呼び出し元スレッドのカルチャは、タスクのコンテキストの一部ではありません。For apps that target versions of the .NET Framework prior to the .NET Framework 4.6.NET Framework 4.6, or for apps that do not target a particular version of the .NET Framework, the culture of the calling thread is not part of a task's context. 代わりに、1つのが明示的に定義されている場合を除き、既定では、新しいスレッドのカルチャはシステムカルチャになります。Instead, unless one is explicitly defined, the culture of new threads by default is the system culture. 次の例は、前の例と同じですが、TargetFrameworkAttribute 属性がない点が異なります。The following example, which is identical to the previous example except that it lacks the TargetFrameworkAttribute attribute, illustrates this. 実行例が英語 (米国) であるシステムのシステムカルチャは、スレッドプールのスレッドで非同期的に実行されるタスクのカルチャであり、fr-fr ではなく en-us です。Because the system culture of the system on which the example executed was English (United States), the culture of the task that executes asynchronously on a thread pool thread is en-US rather than 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 €
Imports System.Globalization
Imports System.Runtime.Versioning
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
       Dim values() As Decimal = { 163025412.32d, 18905365.59d }
       Dim formatString As String = "C2"
       Dim formatDelegate As Func(Of String) = Function()
                                                  Dim output As String = String.Format("Formatting using the {0} culture on thread {1}.",
                                                                                       CultureInfo.CurrentCulture.Name,
                                                                                       Thread.CurrentThread.ManagedThreadId)
                                                  output += Environment.NewLine
                                                  For Each value In values
                                                     output += String.Format("{0}   ", value.ToString(formatString))
                                                  Next 
                                                  output += Environment.NewLine
                                                  Return output
                                               End Function
       
       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" Then
          Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US")
       Else
          Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR")
       End If
       Console.WriteLine("Changed the current culture to {0}.",
                         CultureInfo.CurrentCulture.Name)
       Console.WriteLine()                  
       
       ' 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:") 
       Dim t1 = Task.Run(formatDelegate)
       Console.WriteLine(t1.Result)
       
       Console.WriteLine("Executing a task synchronously:")
       Dim t2 = New Task(Of String)(formatDelegate) 
       t2.RunSynchronously()
       Console.WriteLine(t2.Result)
   End Sub
End Module
' 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 4.5.NET Framework 4.5 以降のバージョンの .NET Framework を対象とするアプリの場合、.NET Framework 4.6.NET Framework 4.6の前に、DefaultThreadCurrentCulture および DefaultThreadCurrentUICulture のプロパティを使用して、呼び出し元のスレッドのカルチャがスレッドプールで実行される非同期タスクで使用されるようにすることができます。レッド.For apps that target versions of the .NET Framework from the .NET Framework 4.5.NET Framework 4.5 and later but prior to the .NET Framework 4.6.NET Framework 4.6, you can use the DefaultThreadCurrentCulture and DefaultThreadCurrentUICulture properties to ensure that the culture of the calling thread is used in asynchronous tasks that execute on thread pool threads. 次の例は前の例と同じですが、DefaultThreadCurrentCulture プロパティを使用して、スレッドプールのスレッドがメインアプリのスレッドと同じカルチャを持つことを確認します。The following example is identical to the previous example, except that it uses the DefaultThreadCurrentCulture property to ensure that thread pool threads have the same culture as the main app thread.

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 €
Imports System.Globalization
Imports System.Runtime.Versioning
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
       Dim values() As Decimal = { 163025412.32d, 18905365.59d }
       Dim formatString As String = "C2"
       Dim formatDelegate As Func(Of String) = Function()
                                                  Dim output As String = String.Format("Formatting using the {0} culture on thread {1}.",
                                                                                       CultureInfo.CurrentCulture.Name,
                                                                                       Thread.CurrentThread.ManagedThreadId)
                                                  output += Environment.NewLine
                                                  For Each value In values
                                                     output += String.Format("{0}   ", value.ToString(formatString))
                                                  Next 
                                                  output += Environment.NewLine
                                                  Return output
                                               End Function
       
       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" Then
          Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US")
       Else
          Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR")
       End If
       Console.WriteLine("Changed the current culture to {0}.",
                         CultureInfo.CurrentCulture.Name)
       CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CurrentCulture
       Console.WriteLine()                  
       
       ' 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:") 
       Dim t1 = Task.Run(formatDelegate)
       Console.WriteLine(t1.Result)
       
       Console.WriteLine("Executing a task synchronously:")
       Dim t2 = New Task(Of String)(formatDelegate) 
       t2.RunSynchronously()
       Console.WriteLine(t2.Result)
   End Sub
End Module
' 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 €

DefaultThreadCurrentCultureDefaultThreadCurrentUICulture はアプリごとのドメインプロパティです。つまり、特定のアプリケーションドメインでカルチャが明示的に割り当てられていないすべてのスレッドの既定のカルチャを設定します。DefaultThreadCurrentCulture and DefaultThreadCurrentUICulture are per-app domain properties; that is, they establish a default culture for all threads not explicitly assigned a culture in a specific application domain. ただし、.NET Framework 4.6.NET Framework 4.6 以降を対象とするアプリでは、タスクがアプリケーションドメインの境界を越えている場合でも、呼び出し元のスレッドのカルチャは非同期タスクのコンテキストの一部として残ります。However, for apps that target the .NET Framework 4.6.NET Framework 4.6 or later, the culture of the calling thread remains part of an asynchronous task's context even if the task crosses app domain boundaries.

次の例は、タスクが実行されているメソッドがアプリケーションドメインの境界を越えている場合でも、呼び出し元のスレッドのカルチャがタスクベースの非同期操作の現在のカルチャを維持していることを示しています。The following example shows that the calling thread's culture remains the current culture of a task-based asynchronous operation even if the method that the task is executing crosses application domain boundaries. このクラスは、1から1000の間のランダムな倍精度浮動小数点数を通貨値として返す1つのメソッド GetFormattedNumberを持つ DataRetrieverクラスを定義します。It defines a class, DataRetriever, with a single method, GetFormattedNumber, that returns a random double-precision floating-point number between 1 and 1,000 formatted as a currency value. 最初のタスクは、単に DataRetriever インスタンスをインスタンス化し、その GetFormattedNumber メソッドを呼び出します。A first task is run that simply instantiates a DataRetriever instance and calls its GetFormattedNumber method. 2番目のタスクは、現在のアプリケーションドメインを報告し、新しいアプリケーションドメインを作成し、新しいアプリケーションドメインで DataRetriever インスタンスをインスタンス化し、その GetFormattedNumber メソッドを呼び出します。A second task reports its current application domain, creates a new application domain, instantiates a DataRetriever instance in the new application domain, and calls its GetFormattedNumber method. この例の出力に示されているように、現在のカルチャは、呼び出し元のスレッド、最初のタスク、および2番目のタスクがメインアプリケーションドメインと2番目のアプリケーションドメインで実行されているときの両方で同じままです。As the output from the example shows, the current culture has remained the same in the calling thread, the first task, and the second task both when it was executing in the main application domain and the second application domain.

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 €
Imports System.Globalization
Imports System.Runtime.Versioning
Imports System.Threading
Imports System.Threading.Tasks

<Assembly:TargetFramework(".NETFramework,Version=v4.6")>

Module Example
   Public Sub Main()
       Dim formatString As String = "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" Then
          Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US")
       Else
          Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR")
       End If

       Console.WriteLine("Changed the current culture to {0}.",
                         CultureInfo.CurrentCulture.Name)
       Console.WriteLine()
       
       ' Call an async delegate to format the values using one format string.
       Console.WriteLine("Executing a task asynchronously in the main appdomain:") 
       Dim t1 = Task.Run(Function()
                            Dim d As New DataRetriever()
                            Return d.GetFormattedNumber(formatString)
                         End Function)
       Console.WriteLine(t1.Result)
       Console.WriteLine() 
       
       Console.WriteLine("Executing a task synchronously in two appdomains:")
       Dim t2 = Task.Run(Function()
                            Console.WriteLine("Thread {0} is running in app domain '{1}'", 
                                              Thread.CurrentThread.ManagedThreadId, 
                                              AppDomain.CurrentDomain.FriendlyName)
                            Dim domain As AppDomain = AppDomain.CreateDomain("Domain2")
                            Dim d As DataRetriever = CType(domain.CreateInstanceAndUnwrap(GetType(Example).Assembly.FullName,
                                                                                          "DataRetriever"), DataRetriever)
                            Return d.GetFormattedNumber(formatString) 
                         End Function) 
       Console.WriteLine(t2.Result)
   End Sub
End Module

Public Class DataRetriever : Inherits MarshalByRefObject
   Public Function GetFormattedNumber(format As String) As String
      Dim thread As 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)
      Dim rnd As New Random()
      Dim value As Double = rnd.NextDouble() * 1000
      Return value.ToString(format)
   End Function
End Class
' 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 オブジェクトのシリアル化CultureInfo object serialization

CultureInfo オブジェクトがシリアル化されると、実際に格納されるものはすべて NameUseUserOverrideになります。When a CultureInfo object is serialized, all that is actually stored is Name and UseUserOverride. この Name が同じ意味を持つ環境でのみ、正常にシリアル化解除されます。It is successfully de-serialized only in an environment where that Name has the same meaning. 次の3つの例では、これが常にそうであるとは限りません。The following three examples show why this is not always the case:

  • CultureTypes プロパティの値が CultureTypes.InstalledWin32Culturesであり、そのカルチャが特定のバージョンの Windows オペレーティングシステムで初めて導入された場合は、以前のバージョンの Windows で逆シリアル化することはできません。If the CultureTypes property value is CultureTypes.InstalledWin32Cultures, and if that culture was first introduced in a particular version of the Windows operating system, it is not possible to deserialize it on an earlier version of Windows. たとえば、カルチャが Windows 10 で導入された場合、Windows 8 で逆シリアル化することはできません。For example, if a culture was introduced in Windows 10, it cannot be deserialized on Windows 8.

  • CultureTypes 値が CultureTypes.UserCustomCultureであり、シリアル化が解除されているコンピューターにこのユーザーカスタムカルチャがインストールされていない場合、逆シリアル化することはできません。If the CultureTypes value is CultureTypes.UserCustomCulture, and the computer on which it is de-serialized does not have this user custom culture installed, it is not possible to deserialize it.

  • CultureTypes 値が CultureTypes.ReplacementCulturesであり、シリアル化解除されるコンピューターにこの置換カルチャがない場合は、同じ名前にシリアル化解除されますが、同じ特性のすべてには逆シリアル化されません。If the CultureTypes value is CultureTypes.ReplacementCultures, and the computer on which it is de-serialized does not have this replacement culture, it de-serializes to the same name, but not all of the same characteristics. たとえば、en-us がコンピューター A の置換カルチャであり、コンピューター B 上にはありません。このカルチャを参照する CultureInfo オブジェクトがコンピューター A でシリアル化され、コンピューター B で逆シリアル化される場合、カルチャのカスタム特性は一切送信されません。For example, if en-US is a replacement culture on computer A, but not on computer B, and if a CultureInfo object referring to this culture is serialized on computer A and de-serialized on computer B, then none of the custom characteristics of the culture are transmitted. カルチャは正常に逆シリアル化されますが、意味は異なります。The culture deserializes successfully, but with a different meaning.

コントロールパネルの上書きControl Panel overrides

ユーザーは、コントロールパネルの [地域と言語のオプション] の部分を使用して、Windows の現在のカルチャに関連付けられている値の一部を上書きすることができます。The user might choose to override some of the values associated with the current culture of Windows through the regional and language options portion of Control Panel. たとえば、ユーザーは、日付を別の形式で表示したり、カルチャに既定以外の通貨を使用したりすることができます。For example, the user might choose to display the date in a different format or to use a currency other than the default for the culture. 一般に、アプリケーションはこれらのユーザーのオーバーライドを優先する必要があります。In general, your applications should honor these user overrides.

UseUserOverridetrue、指定されたカルチャが Windows の現在のカルチャに一致する場合、CultureInfo は、DateTimeFormat プロパティによって返される DateTimeFormatInfo インスタンスのプロパティのユーザー設定、のプロパティなど、これらのオーバーライドを使用し @no__NumberFormat プロパティによって返される t_5_ インスタンス。NumberFormatInfoIf UseUserOverride is true and the specified culture matches the current culture of Windows, the CultureInfo uses those overrides, including user settings for the properties of the DateTimeFormatInfo instance returned by the DateTimeFormat property, and the properties of the NumberFormatInfo instance returned by the NumberFormat property. ユーザー設定が CultureInfoに関連付けられているカルチャと互換性がない場合、たとえば、選択したカレンダーが OptionalCalendarsでない場合、メソッドの結果とプロパティの値は定義されません。If the user settings are incompatible with the culture associated with the CultureInfo, for example, if the selected calendar is not one of the OptionalCalendars, the results of the methods and the values of the properties are undefined.

代替の並べ替え順序Alternate sort orders

一部のカルチャでは、複数の並べ替え順序がサポートされています。Some cultures support more than one sort order. 次に例を示します。For example:

  • スペイン語 (スペイン) カルチャには、既定の国際並べ替え順序と従来の並べ替え順序という2つの並べ替え順があります。The Spanish (Spain) culture has two sort orders: the default international sort order, and the traditional sort order. Es カルチャ名を使用して CultureInfo オブジェクトをインスタンス化すると、国際並べ替え順が使用されます。When you instantiate a CultureInfo object with the es-ES culture name, the international sort order is used. Tradnl カルチャ名を使用して CultureInfo オブジェクトをインスタンス化すると、従来の並べ替え順序が使用されます。When you instantiate a CultureInfo object with the es-ES-tradnl culture name, the traditional sort order is used.

  • Zh-tw (中国語 (簡体字、PRC)) カルチャでは、発音 (既定) とストローク数の2つの並べ替え順がサポートされています。The zh-CN (Chinese (Simplified, PRC)) culture supports two sort orders: by pronunciation (the default) and by stroke count. Zh-tw-CN カルチャ名を使用して CultureInfo オブジェクトをインスタンス化すると、既定の並べ替え順序が使用されます。When you instantiate a CultureInfo object with the zh-CN culture name, the default sort order is used. 0x00020804 のローカル識別子を使用して CultureInfo オブジェクトをインスタンス化すると、文字列はストローク数で並べ替えられます。When you instantiate a CultureInfo object with a local identifier of 0x00020804, strings are sorted by stroke count.

代替の並べ替え順序をサポートするカルチャと、各カルチャの既定の並べ替え順序および代替の並べ替え順序の識別子を次の表に示します。The following table lists the cultures that support alternate sort orders and the identifiers for the default and alternate sort orders.

カルチャ名Culture name カルチャCulture 既定の並べ替え名と識別子Default sort name and identifier 代替の並べ替え名と識別子Alternate sort name and identifier
es-ESes-ES スペイン語 (スペイン)Spanish (Spain) International: 0x00000C0AInternational: 0x00000C0A Traditional: 0x0000040ATraditional: 0x0000040A
zh-TWzh-TW 中国語 (台湾)Chinese (Taiwan) Stroke Count: 0x00000404Stroke Count: 0x00000404 Bopomofo: 0x00030404Bopomofo: 0x00030404
zh-CNzh-CN 中国語 (中国)Chinese (PRC) Pronunciation: 0x00000804Pronunciation: 0x00000804 Stroke Count: 0x00020804Stroke Count: 0x00020804
zh-HKzh-HK 中国語 (香港特別行政区)Chinese (Hong Kong SAR) Stroke Count: 0x00000c04Stroke Count: 0x00000c04 Stroke Count: 0x00020c04Stroke Count: 0x00020c04
zh-SGzh-SG 中国語 (シンガポール)Chinese (Singapore) Pronunciation: 0x00001004Pronunciation: 0x00001004 Stroke Count: 0x00021004Stroke Count: 0x00021004
zh-MOzh-MO 中国語 (マカオ)Chinese (Macao SAR) Pronunciation: 0x00001404Pronunciation: 0x00001404 Stroke Count: 0x00021404Stroke Count: 0x00021404
ja-JPja-JP 日本語 (日本)Japanese (Japan) Default: 0x00000411Default: 0x00000411 Unicode: 0x00010411Unicode: 0x00010411
ko-KRko-KR 韓国語 (韓国)Korean (Korea) Default: 0x00000412Default: 0x00000412 Korean Xwansung - Unicode: 0x00010412Korean Xwansung - Unicode: 0x00010412
de-DEde-DE ドイツ語 (ドイツ)German (Germany) Dictionary: 0x00000407Dictionary: 0x00000407 Phone Book Sort DIN: 0x00010407Phone Book Sort DIN: 0x00010407
hu-HUhu-HU ハンガリー語 (ハンガリー)Hungarian (Hungary) Default: 0x0000040eDefault: 0x0000040e Technical Sort: 0x0001040eTechnical Sort: 0x0001040e
ka-GEka-GE グルジア語 (グルジア共和国)Georgian (Georgia) Traditional: 0x00000437Traditional: 0x00000437 Modern Sort: 0x00010437Modern Sort: 0x00010437

現在のカルチャと UWP アプリThe current culture and UWP apps

ユニバーサル Windows プラットフォーム (UWP) アプリでは、CurrentCultureCurrentUICulture のプロパティは、.NET Framework や .NET Core アプリの場合と同様に、読み取り/書き込みが可能です。In Universal Windows Platform (UWP) apps, the CurrentCulture and CurrentUICulture properties are read-write, just as they are in .NET Framework and .NET Core apps. ただし、UWP アプリでは1つのカルチャが認識されます。However, UWP apps recognize a single culture. CurrentCultureCurrentUICulture の各プロパティは、 Windows の ApplicationModel. .resources ..........The CurrentCulture and CurrentUICulture properties map to the first value in the Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages collection.

.NET Framework と .NET Core アプリでは、現在のカルチャはスレッドごとの設定であり、CurrentCulture プロパティと CurrentUICulture プロパティには、現在のスレッドのカルチャと UI カルチャのみが反映されます。In .NET Framework and .NET Core apps, the current culture is a per-thread setting, and the CurrentCulture and CurrentUICulture properties reflect the culture and UI culture of the current thread only. UWP アプリでは、現在のカルチャは、グローバル設定である、 Windows の ApplicationModel. .resources ............ .resources コレクションにマップされます。In UWP apps, the current culture maps to the Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages collection, which is a global setting. CurrentCulture または CurrentUICulture プロパティを設定すると、アプリ全体のカルチャが変更されます。カルチャは、スレッド単位で設定することはできません。Setting the CurrentCulture or CurrentUICulture property changes the culture of the entire app; culture cannot be set on a per-thread basis.

コンストラクター

CultureInfo(Int32)

カルチャ識別子によって指定するカルチャに基づいて、CultureInfo クラスの新しいインスタンスを初期化します。Initializes a new instance of the CultureInfo class based on the culture specified by the culture identifier.

CultureInfo(Int32, Boolean)

カルチャ識別子で指定したカルチャと、システムからユーザーが選択したカルチャを使用するかどうかを指定するブール値に基づいて、CultureInfo クラスの新しいインスタンスを初期化します。Initializes a new instance of the CultureInfo class based on the culture specified by the culture identifier and on the Boolean that specifies whether to use the user-selected culture settings from the system.

CultureInfo(String)

名前で指定するカルチャに基づいて、CultureInfo クラスの新しいインスタンスを初期化します。Initializes a new instance of the CultureInfo class based on the culture specified by name.

CultureInfo(String, Boolean)

名前で指定したカルチャと、システムからユーザーが選択したカルチャ設定を使用するかどうかを指定するブール値に基づいて、CultureInfo クラスの新しいインスタンスを初期化します。Initializes a new instance of the CultureInfo class based on the culture specified by name and on the Boolean that specifies whether to use the user-selected culture settings from the system.

プロパティ

Calendar

カルチャで使用する既定の暦を取得します。Gets the default calendar used by the culture.

CompareInfo

カルチャの文字列を比較する方法を定義する CompareInfo を取得します。Gets the CompareInfo that defines how to compare strings for the culture.

CultureTypes

現在の CultureInfo オブジェクトに関するカルチャ タイプを取得します。Gets the culture types that pertain to the current CultureInfo object.

CurrentCulture

現在のスレッドで使用するカルチャを表す CultureInfo オブジェクトを取得または設定します。Gets or sets the CultureInfo object that represents the culture used by the current thread.

CurrentUICulture

実行時にカルチャ固有のリソースを参照するためにリソース マネージャーによって使用される現在のユーザー インターフェイスのカルチャを表す CultureInfo オブジェクトを取得または設定します。Gets or sets the CultureInfo object that represents the current user interface culture used by the Resource Manager to look up culture-specific resources at run time.

DateTimeFormat

カルチャに対応する、日時の表示形式を定義する DateTimeFormatInfo を取得または設定します。Gets or sets a DateTimeFormatInfo that defines the culturally appropriate format of displaying dates and times.

DefaultThreadCurrentCulture

現在のアプリケーション ドメインのスレッドの既定のカルチャを取得または設定します。Gets or sets the default culture for threads in the current application domain.

DefaultThreadCurrentUICulture

現在のアプリケーション ドメイン内のスレッドの既定 UI カルチャを取得または設定します。Gets or sets the default UI culture for threads in the current application domain.

DisplayName

完全にローカライズされたカルチャ名を取得します。Gets the full localized culture name.

EnglishName

英語で表した "languagefull [country/regionfull]" という形式のカルチャ名を取得します。Gets the culture name in the format languagefull [country/regionfull] in English.

IetfLanguageTag

非推奨。Deprecated. 言語の RFC 4646 標準 ID を取得します。Gets the RFC 4646 standard identification for a language.

InstalledUICulture

オペレーティング システムと共にインストールされたカルチャを表す CultureInfo を取得します。Gets the CultureInfo that represents the culture installed with the operating system.

InvariantCulture

カルチャに依存しない (インバリアントな) CultureInfo オブジェクトを取得します。Gets the CultureInfo object that is culture-independent (invariant).

IsNeutralCulture

現在の CultureInfo がニュートラル カルチャを表しているかどうかを示す値を取得します。Gets a value indicating whether the current CultureInfo represents a neutral culture.

IsReadOnly

現在の CultureInfo が読み取り専用かどうかを示す値を取得します。Gets a value indicating whether the current CultureInfo is read-only.

KeyboardLayoutId

アクティブな入力ロケール識別子を取得します。Gets the active input locale identifier.

LCID

現在の CultureInfo のカルチャ識別子を取得します。Gets the culture identifier for the current CultureInfo.

Name

languagecode2-country/regioncode2 という形式のカルチャ名を取得します。Gets the culture name in the format languagecode2-country/regioncode2.

NativeName

カルチャの表示設定である、言語、国/地域、およびオプションのスクリプトで構成されるカルチャ名を取得します。Gets the culture name, consisting of the language, the country/region, and the optional script, that the culture is set to display.

NumberFormat

数値、通貨、割合を表示する、カルチャに対応する書式を定義する NumberFormatInfo を取得または設定します。Gets or sets a NumberFormatInfo that defines the culturally appropriate format of displaying numbers, currency, and percentage.

OptionalCalendars

カルチャで使用できる暦の一覧を取得します。Gets the list of calendars that can be used by the culture.

Parent

現在の CultureInfo の親カルチャを表す CultureInfo を取得します。Gets the CultureInfo that represents the parent culture of the current CultureInfo.

TextInfo

カルチャに関連付けられている書記体系を定義する TextInfo を取得します。Gets the TextInfo that defines the writing system associated with the culture.

ThreeLetterISOLanguageName

現在の CultureInfo の言語に対する ISO 639-2 の 3 桁の文字コードを取得します。Gets the ISO 639-2 three-letter code for the language of the current CultureInfo.

ThreeLetterWindowsLanguageName

Windows API の定義に従って、言語に対する 3 文字コードを取得します。Gets the three-letter code for the language as defined in the Windows API.

TwoLetterISOLanguageName

現在の CultureInfo の言語に対する ISO 639-1 の 2 桁の文字コードを取得します。Gets the ISO 639-1 two-letter code for the language of the current CultureInfo.

UseUserOverride

現在の CultureInfo オブジェクトでユーザーが選択したカルチャ設定を使用するかどうかを示す値を取得します。Gets a value indicating whether the current CultureInfo object uses the user-selected culture settings.

メソッド

ClearCachedData()

キャッシュされたカルチャ関連情報を更新します。Refreshes cached culture-related information.

Clone()

現在の CultureInfo のコピーを作成します。Creates a copy of the current CultureInfo.

CreateSpecificCulture(String)

指定した名前に関連付けられている特定のカルチャを表す CultureInfo を作成します。Creates a CultureInfo that represents the specific culture that is associated with the specified name.

Equals(Object)

指定したオブジェクトが現在の CultureInfo と同じカルチャかどうかを判断します。Determines whether the specified object is the same culture as the current CultureInfo.

GetConsoleFallbackUICulture()

グラフィック ユーザー インターフェイスの既定のカルチャが不適切な場合、コンソール アプリケーションに適した代替のユーザー インターフェイス カルチャを取得します。Gets an alternate user interface culture suitable for console applications when the default graphic user interface culture is unsuitable.

GetCultureInfo(Int32)

指定されたカルチャ識別子を使用して、カルチャのキャッシュされた読み取り専用インスタンスを取得します。Retrieves a cached, read-only instance of a culture by using the specified culture identifier.

GetCultureInfo(String)

指定されたカルチャ名を使用して、カルチャのキャッシュされた読み取り専用インスタンスを取得します。Retrieves a cached, read-only instance of a culture using the specified culture name.

GetCultureInfo(String, String)

カルチャのキャッシュされた読み取り専用インスタンスを取得します。Retrieves a cached, read-only instance of a culture. パラメーターは、別のカルチャで指定された TextInfo オブジェクトおよび CompareInfo オブジェクトで初期化されたカルチャを指定します。Parameters specify a culture that is initialized with the TextInfo and CompareInfo objects specified by another culture.

GetCultureInfoByIetfLanguageTag(String)

非推奨。Deprecated. 指定された RFC 4646 言語タグで示される言語特性を持つ、読み取り専用 CultureInfo オブジェクトを取得します。Retrieves a read-only CultureInfo object having linguistic characteristics that are identified by the specified RFC 4646 language tag.

GetCultures(CultureTypes)

サポートされているカルチャを、指定した CultureTypes パラメーターでフィルター処理した結果のリストを取得します。Gets the list of supported cultures filtered by the specified CultureTypes parameter.

GetFormat(Type)

指定した型に書式指定する方法を定義するオブジェクトを取得します。Gets an object that defines how to format the specified type.

GetHashCode()

現在の CultureInfo のハッシュ関数として機能します。ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。Serves as a hash function for the current CultureInfo, suitable for hashing algorithms and data structures, such as a hash table.

GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)
ReadOnly(CultureInfo)

指定した CultureInfo オブジェクトをラップする読み取り専用のラッパーを返します。Returns a read-only wrapper around the specified CultureInfo object.

ToString()

languagecode2-country/regioncode2 という形式で、現在の CultureInfo の名前を格納している文字列を返します。Returns a string containing the name of the current CultureInfo in the format languagecode2-country/regioncode2.

適用対象

こちらもご覧ください