CultureInfo CultureInfo CultureInfo CultureInfo Class

Определение

Предоставляет сведения об определенном языке и региональных параметрах (которые в совокупности называются языковым стандартом для разработки неуправляемого кода).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
Наследование
CultureInfoCultureInfoCultureInfoCultureInfo
Атрибуты
Реализации

Примеры

В следующем примере показано, как создать 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. Этот класс также предоставляет DateTimeFormatInfoдоступ к экземплярам, NumberFormatInfo, CompareInfoи 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. Класс используется либо напрямую, либо косвенно в классах, которые отформатируют, анализируют или управляют данными, связанными Stringс языком DateTimeOffsetи региональными параметрами, такими как, DateTime, и числовые типы. CultureInfoThe 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 и культурные данные Текущий и текущий язык и региональные параметры пользовательского интерфейса 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
Культура и приложения WindowsCulture 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.

Примечание

Если имя языка и региональных параметров передается конструктору класса или методу CreateSpecificCulture , CultureInfoнапример или, его регистр не имеет значения.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 — двухбуквенный код языка, а Country/regioncode2 — это двухбуквенный код.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). В случаях, когда код языка с двумя буквами недоступен, используется трехбуквенный код, производный от ISO 639-2.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. Например, Цирл задает кириллицу script, а ЛАТН — Латинский скрипт.For example, Cyrl specifies the Cyrillic script and Latn specifies the Latin script. Имя языка и региональных параметров, включающее сценарий, использует шаблон languagecode2-скрипттаг-Country/regioncode2.A culture name that includes a script uses the pattern languagecode2-scripttag-country/regioncode2. Примером такого типа имени языка и региональных параметров является uz-Цирл-UZ для узбекский (кириллица, Узбекистан).An example of this type of culture name is uz-Cyrl-UZ for Uzbek (Cyrillic, Uzbekistan). В операционных системах Windows до Windows Vista имя языка и региональных параметров, включающее сценарий, использует шаблон languagecode2-Country/regioncode2-скрипттаг, например uz-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).

Нейтральный язык и региональные параметры задаются только с помощью кода языка из двух букв в нижнем регистре.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.

Примечание

Существует два имени языка и региональных параметров, противоречащих этому правилу.There are two culture names that contradict this rule. Языки и региональные параметры (упрощенное письмо) с именем zh-Ханс и китайский (традиционное письмо) с именем zh-Hant являются нейтральными.The cultures Chinese (Simplified), named zh-Hans, and Chinese (Traditional), named zh-Hant, are neutral cultures. Имена языка и региональных параметров представляют текущий стандарт и должны использоваться, если нет причины использовать старые имена zh-CHS и zh-CHT.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.

Идентификатор языка и региональных параметров — это стандартное международные числовые сокращения и компоненты, необходимые для уникальной идентификации одного из установленных языков и региональных параметров.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. Построитель языковых стандартов Майкрософт написан на управляемом 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

Языки и региональные параметры обычно группируются в три набора: инвариантные, нейтральные и конкретные языки и региональные параметры.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. Кроме того, Name свойство CompareInfo объекта, созданного для нейтрального языка и региональных параметров, возвращает только страну и не включает в себя регион.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.

Список языковых стандартов в API Windows немного отличается от списка языков и региональных параметров, поддерживаемых .NET Framework.The list of locales in the Windows API is slightly different from the list of cultures supported by the .NET Framework. Если требуется взаимодействие с Windows, например с помощью механизма p/Invoke, приложение должно использовать определенные языки и региональные параметры, определенные для операционной системы.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.Calendar параметр имеет TaiwanCalendar значение, Thread.CurrentCulture но DateTimeFormatInfo.GetEraName DateTimeFormatInfo.GetAbbreviatedEraName не имеет значение zh-TW, ,ивозвращаетпустуюстроку("").DateTimeFormatInfo.NativeCalendarNameIf 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 поддерживает три типа пользовательских языков и региональных параметров: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. Например, приложение может установить CultureInfo объект, представляющий язык и региональные параметры "fj-FJ" (или фижан (Фиджи)) в системе.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-часовой формат даты или ГГГГММДД.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 .

Значение свойства пользовательских языков и региональных параметров, установленных в системе, System.Globalization.CultureTypes включает флаг, а для LCID LOCALE_CUSTOM_UNSPECIFIED пользовательских языков и региональных параметров назначается значение свойства (0x1000 или 4096). CultureTypesThe 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.

  • Во всех версиях .NET Core, работающих в Windows, региональные данные обеспечиваются операционной системой Windows.In all versions of .NET Core running on Windows, cultural data is provided by the Windows operating system.

  • Во всех версиях .NET Core, работающих на платформах UNIX, региональные данные предоставляются библиотекой международных компонентов для Юникода (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-CN» или «китайский (упрощенное письмо, Китай)» и «zh-TW» или «китайский (традиционное письмо, Тайвань)» — это доступные языки и региональные параметры в системах 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-CN" — это псевдоним для языка и региональных параметров "zh-Ханс-CN", а "zh-TW" — псевдоним для языка и региональных параметров "zh-Hant-TW"."zh-CN" is an alias for the "zh-Hans-CN" culture, and "zh-TW" is an alias for the "zh-Hant-TW" culture. Недоступные для псевдонимов языки и региональные параметры GetCultures не возвращаются вызовами метода и могут иметь разные значения Parent свойств, включая различные языки и региональные параметры, чем их аналоги в Windows.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-CN и zh-TW эти дифференес включают следующее:For the zh-CN and zh-TW cultures, these differenes include the following:

  • В системах Windows родительский язык и региональные параметры "zh-CN" имеют значение "zh-Ханс", а родительский язык и региональные параметры "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.The parent culture of both these cultures is "zh". В системах UNIX родительскими для обоих языков являются "zh".On Unix systems, the parents of both cultures are "zh". Это означает, что, если вы не предоставляете ресурсы для языка и региональных параметров "zh-CN" или "zh-TW", но предоставляете ресурсы для нейтрального языка и региональных параметров "zh-Ханс" или "zh-Hant", приложение загрузит ресурсы для нейтрального языка и региональных параметров в 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-Ханс" или "zh-Hant".On Unix systems, you must explicitly set the thread's CurrentUICulture to either "zh-Hans" or "zh-Hant".

  • В системах Windows вызов CultureInfo.Equals в экземпляре, который представляет язык и региональные параметры "zh-CN" и передает его экземпляр "zh-Ханс-CN", возвращает. trueOn 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. Это поведение также применяется для вызова Equals в экземпляре «zh-TW CultureInfo » и передачи ему экземпляра «zh-Hant-TW».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.

Текущий и текущий язык и региональные параметры пользовательского интерфейсаThe current culture and current UI culture

Каждый поток в приложении .NET имеет текущий язык и региональные параметры пользовательского интерфейса.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. Текущий язык и региональные параметры пользовательского интерфейса используются для получения ресурсов, зависящих от языка и региональных параметров, во время выполнения.The current UI culture is used to retrieve culture-specific resources at runtime.

Примечание

Сведения о том, как текущий и текущий язык и региональные параметры пользовательского интерфейса определяются на основе каждого потока, см. в разделе Culture и threads .For information on how the current and current UI culture is determined on a per-thread basis, see the Culture and threads section. Сведения о том, как текущий и текущий язык и региональные параметры пользовательского интерфейса определяются в потоках, выполняемых в новом домене приложения, а также в потоках, пересекающих границы домена приложения, см. в разделе культуры и домены приложений .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. Более подробные сведения о текущем языке и региональных параметрах пользовательского интерфейса CultureInfo.CurrentUICulture см. в разделе Свойства.For more detailed information on the current UI culture, see the CultureInfo.CurrentUICulture property topic.

Получение текущих и текущих языков и региональных параметров пользовательского интерфейсаRetrieving the current and current UI cultures

CultureInfo Объект, представляющий текущий язык и региональные параметры, можно получить одним из двух способов: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

CultureInfo Объект, представляющий текущий язык и региональные параметры пользовательского интерфейса, можно получить одним из двух способов:You can get a CultureInfo object that represents the current UI 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 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

Настройка текущего и текущего языка и региональных параметров пользовательского интерфейсаSetting the current and current UI cultures

Чтобы изменить культуру и культуру пользовательского интерфейса для потока, выполните следующие действия.To change the culture and UI culture of a thread, do the following:

  1. Создайте экземпляр CultureInfo объекта, который представляет этот язык и региональные параметры, вызвав конструктор класса и передав ему имя языка и региональных параметров. CultureInfoInstantiate a CultureInfo object that represents that culture by calling a CultureInfo class constructor and passing it the name of the culture. Конструктор создает экземпляр CultureInfo объекта, который отражает переопределения, переопределяемые пользователем, если новый язык и региональные параметры совпадают с текущим языком и региональными параметрами Windows. CultureInfo(String)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 экземпляр объекта пользовательские переопределения, если новый язык и региональные параметры совпадают с текущим языком и региональными параметрами Windows. CultureInfo(String, Boolean)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.CurrentUICulture или в .NET Core и .NET Framework 4,6 и более поздних версий. CultureInfo.CurrentCulture CultureInfoAssign 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 метод вызывается дважды, сначала 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

При запуске нового потока приложения его текущий и текущий язык и региональные параметры пользовательского интерфейса определяются текущей культурой системы, а не культурой текущего потока.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. Он устанавливает язык и региональные параметры текущего языка и региональных параметров пользовательского интерфейса для потока приложения на французский (Франция) (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). Он отображает три случайных числа в виде денежных значений, а затем создает новый поток, который, в свою очередь, отображает три более случайных числа в виде значений валюты.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 до .NET Framework 4.5.NET Framework 4.5, самый распространенный способ убедиться, что главный поток приложения использует одни и те же региональные параметры совместно со всеми другими рабочими потоками, — передать либо имя культуры уровня приложения, 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. В следующем примере используется этот подход, чтобы убедиться, что значения валюты, отображаемые двумя потоками, соответствуют соглашениям о форматировании одного и того же языка и региональных параметров.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 €

Язык и региональные параметры пользовательского интерфейса потоков пула потоков можно задать аналогичным образом, вызвав 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 .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 €

Предупреждение

Несмотря на то DefaultThreadCurrentUICulture , что свойства иявляютсястатическимичленами,ониопределяютязыкирегиональныепараметрыпоумолчаниюирегиональныепараметрыпользовательскогоинтерфейсапоумолчаниютолькодлядоменаприложения,которыйявляетсятекущимнамоментзаданияэтихзначенийсвойств.DefaultThreadCurrentCultureAlthough 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.

При присвоении значений DefaultThreadCurrentCulture свойствам и DefaultThreadCurrentUICulture язык и региональные параметры пользовательского интерфейса для потоков в домене приложения также изменяются, если им не было явно назначен язык и региональные параметры.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. В результате рекомендуется всегда задавать язык и региональные параметры для основного потока приложения, а не DefaultThreadCurrentCulture изменять его свойства и. DefaultThreadCurrentUICultureAs 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

DefaultThreadCurrentCultureи DefaultThreadCurrentUICulture — это статические свойства, которые явно определяют язык и региональные параметры по умолчанию только для домена приложения, который является текущим при установке или получении значения свойства.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. В следующем примере задается язык и региональные параметры по умолчанию, а также язык и региональные параметры пользовательского интерфейса по умолчанию в AppDomainSetup домене приложения по AppDomainInitializer умолчанию для французского языка (Франция), а затем с помощью класса и делегата устанавливаются язык и региональные параметры по умолчанию в новом домене приложения для Русский (Россия).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). Затем один поток выполняет два метода в каждом домене приложения.A single thread then executes two methods in each application domain. Обратите внимание, что культура и язык и региональные параметры пользовательского интерфейса не заданы явно. они являются производными от языка и региональных параметров по умолчанию и пользовательского интерфейса домена приложения, в котором выполняется поток.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, асинхронные операции по умолчанию наследуют значения CurrentCulture свойств CurrentUICulture и потока, из которого они запускаются.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. Если текущий язык и региональные параметры или текущий язык и региональные параметры пользовательского интерфейса отличаются от языка и региональных параметров системы, текущий язык и региональные параметры пересекает границы потоков и становится текущим языком и региональными параметрами потока пула потоков, выполняющего асинхронную операцию.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 до .NET Framework 4.6.NET Framework 4.6, или для приложений, которые не предназначены для определенной версии .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. Вместо этого, если только он не определен явно, язык и региональные параметры новых потоков по умолчанию являются языком и региональными параметрами системы.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. Поскольку язык и региональные параметры системы, в которой выполнялся пример, были англоязычными (США), язык и региональные параметры задачи, выполняемой асинхронно в потоке пула потоков, — это en-US, а не fr-FR.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 €

DefaultThreadCurrentCultureи DefaultThreadCurrentUICulture — это свойства домена для каждого приложения, то есть они устанавливают язык и региональные параметры по умолчанию для всех потоков, которым явно не присвоено значение языка и региональных параметров в определенном домене приложения.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. Он определяет класс DataRetrieverс одним GetFormattedNumberметодом, который возвращает случайное число двойной точности с плавающей запятой в диапазоне от 1 до 1 000 в формате денежного значения.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. Вторая задача сообщает о текущем домене приложения, создает новый домен приложения, 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. Как видно из выходных данных в примере, текущий язык и региональные параметры остаются в вызывающем потоке, первой задаче и второй задаче как при выполнении в основном домене приложения, так и во втором домене приложения.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 €

Сериализация объектов CultureInfoCultureInfo object serialization

При сериализации Name UseUserOverrideобъекта все, что фактически хранится, — это и. CultureInfoWhen 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. В следующих трех примерах показано, почему это не всегда так:The following three examples show why this is not always the case:

  • Если значение CultureTypes.InstalledWin32Culturesсвойства равно, а если этот язык и региональные параметры впервые появились в определенной версии операционной системы Windows, десериализовать ее в более ранней версии Windows невозможно. CultureTypesIf 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.UserCustomCulture, а на компьютере, на котором он десериализован, не установлена эта пользовательская культура, десериализация невозможна. CultureTypesIf 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.ReplacementCultures, а компьютер, на котором она десериализована, не имеет этой замещающей культуры, она десериализуется с тем же именем, но не со всеми теми же характеристиками. CultureTypesIf 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 является замещающим языком и региональными параметрами на компьютере а, но не на компьютере б, CultureInfo и если объект, ссылающийся на этот язык, сериализуется на компьютере а и десериализуется на компьютере 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.

Если UseUserOverride параметр true имеет значение, а указанные язык и региональные параметры соответствуют текущему CultureInfo языку и региональным параметрам Windows, компонент использует эти DateTimeFormatInfo переопределения, включая пользовательские DateTimeFormat параметры для свойств экземпляра, возвращаемого свойством. и свойства NumberFormatInfo экземпляра, возвращаемого NumberFormat свойством.If 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:

  • Испанский (Испания) язык и региональные параметры имеют два порядка сортировки: по умолчанию международный порядок сортировки и традиционный порядок сортировки.The Spanish (Spain) culture has two sort orders: the default international sort order, and the traditional sort order. При создании экземпляра CultureInfo объекта с именем языка и региональных параметров es-ES используется международный порядок сортировки.When you instantiate a CultureInfo object with the es-ES culture name, the international sort order is used. При создании экземпляра CultureInfo объекта с именем языка и региональных параметров es-ES-траднл используется традиционный порядок сортировки.When you instantiate a CultureInfo object with the es-ES-tradnl culture name, the traditional sort order is used.

  • Язык и региональные параметры zh-CN (китайский (упрощенное письмо, КНР)) поддерживают два порядка сортировки: по произношению (по умолчанию) и по числу штрихов.The zh-CN (Chinese (Simplified, PRC)) culture supports two sort orders: by pronunciation (the default) and by stroke count. При создании экземпляра CultureInfo объекта с именем культуры zh-CN используется порядок сортировки по умолчанию.When you instantiate a CultureInfo object with the zh-CN culture name, the default sort order is used. При создании экземпляра CultureInfo объекта с локальным идентификатором 0x00020804 строки сортируются по числу штрихов.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 cultureCulture Имя и идентификатор сортировки по умолчаниюDefault sort name and identifier Альтернативное имя и идентификатор сортировкиAlternate sort name and identifier
es-ESes-ES Испанский (Испания)Spanish (Spain) Национальные 0x00000C0AInternational: 0x00000C0A Обычную 0x0000040ATraditional: 0x0000040A
zh-TWzh-TW Китайский (Тайвань)Chinese (Taiwan) Число штрихов: 0x00000404Stroke Count: 0x00000404 Бопомофо 0x00030404Bopomofo: 0x00030404
zh-CNzh-CN Китайский (КНР)Chinese (PRC) Произношение 0x00000804Pronunciation: 0x00000804 Число штрихов: 0x00020804Stroke Count: 0x00020804
zh-HKzh-HK Китайский (Гонконг, САР)Chinese (Hong Kong SAR) Число штрихов: 0x00000c04Stroke Count: 0x00000c04 Число штрихов: 0x00020c04Stroke Count: 0x00020c04
zh-SGzh-SG Китайский (Сингапур)Chinese (Singapore) Произношение 0x00001004Pronunciation: 0x00001004 Число штрихов: 0x00021004Stroke Count: 0x00021004
zh-MOzh-MO Китайский (Макао, САР)Chinese (Macao SAR) Произношение 0x00001404Pronunciation: 0x00001404 Число штрихов: 0x00021404Stroke Count: 0x00021404
ja-JPja-JP Японский (Япония)Japanese (Japan) По умолчанию: 0x00000411Default: 0x00000411 Юникод: 0x00010411Unicode: 0x00010411
ko-KRko-KR Корейский (Корея)Korean (Korea) По умолчанию: 0x00000412Default: 0x00000412 Корейский Ксвансунг — Юникод: 0x00010412Korean Xwansung - Unicode: 0x00010412
de-DEde-DE Немецкий (Германия)German (Germany) Словаря 0x00000407Dictionary: 0x00000407 Сортировка по телефонной книге (DIN): 0x00010407Phone Book Sort DIN: 0x00010407
hu-HUhu-HU Венгерский (Венгрия)Hungarian (Hungary) По умолчанию: 0x0000040eDefault: 0x0000040e Техническая сортировка: 0x0001040eTechnical Sort: 0x0001040e
ка-GEka-GE Грузинский (Грузия)Georgian (Georgia) Обычную 0x00000437Traditional: 0x00000437 Современная сортировка: 0x00010437Modern Sort: 0x00010437

Текущие язык и региональные параметры и приложения UWPThe current culture and UWP apps

В приложениях CurrentCulture универсальная платформа Windows (UWP) свойства и доступны CurrentUICulture для чтения и записи так же, как и в .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 распознают один язык и региональные параметры.However, UWP apps recognize a single culture. Свойства CurrentCulture иCurrentUICulture сопоставляются с первым значением в коллекции Windows. ApplicationModel. Resources. Core. ResourceManager. дефаултконтекст. Languages .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 и соответствуют культуре и языку и региональным параметрам пользовательского интерфейса текущего потока.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. Core. ResourceManager. дефаултконтекст. Languages , которая является глобальным параметром.In UWP apps, the current culture maps to the Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages collection, which is a global setting. Установка свойства CurrentUICulture или изменяет язык и региональные параметры для всего приложения; язык и региональные параметры не могут устанавливаться отдельно для каждого потока. CurrentCultureSetting the CurrentCulture or CurrentUICulture property changes the culture of the entire app; culture cannot be set on a per-thread basis.

Конструкторы

CultureInfo(Int32) CultureInfo(Int32) CultureInfo(Int32) CultureInfo(Int32)

Инициализирует новый экземпляр класса CultureInfo на основе языка и региональных параметров, заданных идентификатором.Initializes a new instance of the CultureInfo class based on the culture specified by the culture identifier.

CultureInfo(Int32, Boolean) CultureInfo(Int32, Boolean) CultureInfo(Int32, Boolean) 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(String) CultureInfo(String) CultureInfo(String)

Инициализирует новый экземпляр класса CultureInfo на основе языка и региональных параметров, заданных именем.Initializes a new instance of the CultureInfo class based on the culture specified by name.

CultureInfo(String, Boolean) CultureInfo(String, Boolean) CultureInfo(String, Boolean) 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 Calendar Calendar Calendar

Возвращает календарь, используемый по умолчанию для языка и региональных параметров.Gets the default calendar used by the culture.

CompareInfo CompareInfo CompareInfo CompareInfo

Возвращает CompareInfo для определения способа сравнения строк в данном языке и региональных параметрах.Gets the CompareInfo that defines how to compare strings for the culture.

CultureTypes CultureTypes CultureTypes CultureTypes

Возвращает типы языков и региональных параметров, относящихся к текущему объекту CultureInfo.Gets the culture types that pertain to the current CultureInfo object.

CurrentCulture CurrentCulture CurrentCulture CurrentCulture

Получает или задает объект CultureInfo, который представляет язык и региональные параметры, используемые текущим потоком.Gets or sets the CultureInfo object that represents the culture used by the current thread.

CurrentUICulture CurrentUICulture CurrentUICulture 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 DateTimeFormat DateTimeFormat DateTimeFormat

Возвращает или задает DateTimeFormatInfo, определяющий формат отображения даты и времени, соответствующий языку и региональным параметрам.Gets or sets a DateTimeFormatInfo that defines the culturally appropriate format of displaying dates and times.

DefaultThreadCurrentCulture DefaultThreadCurrentCulture DefaultThreadCurrentCulture DefaultThreadCurrentCulture

Получает или задает язык и региональные параметры, используемые по умолчанию для потоков в текущем домене приложения.Gets or sets the default culture for threads in the current application domain.

DefaultThreadCurrentUICulture DefaultThreadCurrentUICulture DefaultThreadCurrentUICulture DefaultThreadCurrentUICulture

Возвращает или задает язык и региональные параметры пользовательского интерфейса, используемые по умолчанию для потоков в текущем домене приложения.Gets or sets the default UI culture for threads in the current application domain.

DisplayName DisplayName DisplayName DisplayName

Возвращает полное локализованное имя языка и региональных параметров.Gets the full localized culture name.

EnglishName EnglishName EnglishName EnglishName

Возвращает имя языка и региональных параметров в формате languagefull [country/regionfull] на английском языке.Gets the culture name in the format languagefull [country/regionfull] in English.

IetfLanguageTag IetfLanguageTag IetfLanguageTag IetfLanguageTag

Не рекомендуется.Deprecated. Получает идентификацию языка по стандарту RFC 4646.Gets the RFC 4646 standard identification for a language.

InstalledUICulture InstalledUICulture InstalledUICulture InstalledUICulture

Возвращает значение CultureInfo, представляющее язык и региональные параметры, установленные с операционной системой.Gets the CultureInfo that represents the culture installed with the operating system.

InvariantCulture InvariantCulture InvariantCulture InvariantCulture

Получает объект CultureInfo, не зависящий от языка и региональных параметров (инвариантный).Gets the CultureInfo object that is culture-independent (invariant).

IsNeutralCulture IsNeutralCulture IsNeutralCulture IsNeutralCulture

Возвращает значение, показывающее, представляет ли текущий CultureInfo нейтральный язык и региональные параметры.Gets a value indicating whether the current CultureInfo represents a neutral culture.

IsReadOnly IsReadOnly IsReadOnly IsReadOnly

Возвращает значение, определяющее, доступен ли текущий объект CultureInfo только для чтения.Gets a value indicating whether the current CultureInfo is read-only.

KeyboardLayoutId KeyboardLayoutId KeyboardLayoutId KeyboardLayoutId

Получает активный идентификатор языка ввода.Gets the active input locale identifier.

LCID LCID LCID LCID

Возвращает идентификатор языка и региональных параметров для текущего CultureInfo.Gets the culture identifier for the current CultureInfo.

Name Name Name Name

Возвращает имя языка и региональных параметров в формате languagecode2-country/regioncode2.Gets the culture name in the format languagecode2-country/regioncode2.

NativeName NativeName NativeName NativeName

Получает имя языка и региональных параметров, состоящих из языка, страны или региона и дополнительного набора символов, которые свойственны для этого языка.Gets the culture name, consisting of the language, the country/region, and the optional script, that the culture is set to display.

NumberFormat NumberFormat NumberFormat NumberFormat

Возвращает или задает NumberFormatInfo, определяющий формат отображения чисел, денежной единицы и процентов, соответствующий языку и региональным параметрам.Gets or sets a NumberFormatInfo that defines the culturally appropriate format of displaying numbers, currency, and percentage.

OptionalCalendars OptionalCalendars OptionalCalendars OptionalCalendars

Возвращает список календарей, которые могут использоваться в данном языке и региональных параметров.Gets the list of calendars that can be used by the culture.

Parent Parent Parent Parent

Получает объект CultureInfo, представляющий родительский язык и региональные параметры текущего объекта CultureInfo.Gets the CultureInfo that represents the parent culture of the current CultureInfo.

TextInfo TextInfo TextInfo TextInfo

Возвращает значение TextInfo, определяющее систему письма, связанную с данным языком и региональными параметрами.Gets the TextInfo that defines the writing system associated with the culture.

ThreeLetterISOLanguageName ThreeLetterISOLanguageName ThreeLetterISOLanguageName ThreeLetterISOLanguageName

Возвращает трехбуквенный код ISO 639-2 для языка текущего CultureInfo.Gets the ISO 639-2 three-letter code for the language of the current CultureInfo.

ThreeLetterWindowsLanguageName ThreeLetterWindowsLanguageName ThreeLetterWindowsLanguageName ThreeLetterWindowsLanguageName

Возвращает трехбуквенный код для языка, определенный в формате Windows API.Gets the three-letter code for the language as defined in the Windows API.

TwoLetterISOLanguageName TwoLetterISOLanguageName TwoLetterISOLanguageName TwoLetterISOLanguageName

Получает двухбуквенный код ISO 639-1 для языка текущего объекта CultureInfo.Gets the ISO 639-1 two-letter code for the language of the current CultureInfo.

UseUserOverride UseUserOverride UseUserOverride UseUserOverride

Получает значение, которое указывает, использует ли текущий объект CultureInfo параметры языка и региональных параметров, выбранные пользователем.Gets a value indicating whether the current CultureInfo object uses the user-selected culture settings.

Методы

ClearCachedData() ClearCachedData() ClearCachedData() ClearCachedData()

Обновляет кешированные данные, связанные с языком и региональными параметрами.Refreshes cached culture-related information.

Clone() Clone() Clone() Clone()

Создает копию текущего поставщика CultureInfo.Creates a copy of the current CultureInfo.

CreateSpecificCulture(String) CreateSpecificCulture(String) CreateSpecificCulture(String) CreateSpecificCulture(String)

Создает объект CultureInfo, который представляет определенный язык и региональные параметры, соответствующие заданному имени.Creates a CultureInfo that represents the specific culture that is associated with the specified name.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Определяет, является ли заданный объект тем же языком и региональными параметрами, что и текущий CultureInfo.Determines whether the specified object is the same culture as the current CultureInfo.

GetConsoleFallbackUICulture() GetConsoleFallbackUICulture() GetConsoleFallbackUICulture() GetConsoleFallbackUICulture()

Получает язык и региональные стандарты интерфейса пользователя, подходящие для приложений консоли, если при этом неприменим язык и региональные стандарты графического пользовательского интерфейса по умолчанию.Gets an alternate user interface culture suitable for console applications when the default graphic user interface culture is unsuitable.

GetCultureInfo(Int32) GetCultureInfo(Int32) GetCultureInfo(Int32) GetCultureInfo(Int32)

Служит для получения кэшированного доступного только для чтения экземпляра языка и региональных параметров с помощью указанного идентификатора языка и региональных параметров.Retrieves a cached, read-only instance of a culture by using the specified culture identifier.

GetCultureInfo(String) GetCultureInfo(String) GetCultureInfo(String) GetCultureInfo(String)

Служит для получения кэшированного экземпляра языка и региональных параметров с помощью указанного имени.Retrieves a cached, read-only instance of a culture using the specified culture name.

GetCultureInfo(String, String) GetCultureInfo(String, String) GetCultureInfo(String, String) 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) GetCultureInfoByIetfLanguageTag(String) GetCultureInfoByIetfLanguageTag(String) GetCultureInfoByIetfLanguageTag(String)

Не рекомендуется.Deprecated. Служит для получения объекта CultureInfo, доступного только для чтения, который имеет языковые характеристики, указываемые определенным языковым тегом RFC 4646.Retrieves a read-only CultureInfo object having linguistic characteristics that are identified by the specified RFC 4646 language tag.

GetCultures(CultureTypes) GetCultures(CultureTypes) GetCultures(CultureTypes) GetCultures(CultureTypes)

Возвращает список поддерживаемых языков и региональных параметров, отфильтрованный по заданным значениям параметра CultureTypes.Gets the list of supported cultures filtered by the specified CultureTypes parameter.

GetFormat(Type) GetFormat(Type) GetFormat(Type) GetFormat(Type)

Возвращает объект, определяющий способ форматирования заданного типа.Gets an object that defines how to format the specified type.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Служит хэш-функцией текущего класса CultureInfo для использования в алгоритмах и структурах данных хеширования, например в хэш-таблице.Serves as a hash function for the current CultureInfo, suitable for hashing algorithms and data structures, such as a hash table.

GetType() GetType() GetType() GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Inherited from Object)
ReadOnly(CultureInfo) ReadOnly(CultureInfo) ReadOnly(CultureInfo) ReadOnly(CultureInfo)

Возвращает доступную только для чтения программу-оболочку для заданного объекта CultureInfo.Returns a read-only wrapper around the specified CultureInfo object.

ToString() ToString() ToString() ToString()

Возвращает строку, содержащую имя текущего объекта CultureInfo в формате languagecode2-country/regioncode2.Returns a string containing the name of the current CultureInfo in the format languagecode2-country/regioncode2.

Применяется к

Дополнительно