CultureInfo Clase

Definición

Proporciona información sobre una referencia cultural concreta (lo que se denomina configuración regional en desarrollo de código no administrado).Provides information about a specific culture (called a locale for unmanaged code development). La información incluye los nombres de la referencia cultural, el sistema de escritura, el calendario usado, el criterio de ordenación y el formato de las fechas y los números.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
Herencia
CultureInfo
Atributos
Implementaciones

Ejemplos

En el ejemplo siguiente se muestra cómo crear un objeto CultureInfo para español (España) con la ordenación internacional y otro objeto CultureInfo con la ordenación tradicional.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

Comentarios

La clase CultureInfo proporciona información específica de la referencia cultural, como el idioma, el subidioma, el país o la región, el calendario y las convenciones asociadas a una referencia cultural determinada.The CultureInfo class provides culture-specific information, such as the language, sublanguage, country/region, calendar, and conventions associated with a particular culture. Esta clase también proporciona acceso a las instancias específicas de la referencia cultural de los objetos DateTimeFormatInfo, NumberFormatInfo, CompareInfoy TextInfo.This class also provides access to culture-specific instances of the DateTimeFormatInfo, NumberFormatInfo, CompareInfo, and TextInfo objects. Estos objetos contienen la información necesaria para las operaciones específicas de la referencia cultural, como el uso de mayúsculas y minúsculas, el formato de fechas y números y la comparación de cadenas.These objects contain the information required for culture-specific operations, such as casing, formatting dates and numbers, and comparing strings. La clase CultureInfo se utiliza directa o indirectamente por las clases que dan formato, analizan o manipulan datos específicos de la referencia cultural, como String, DateTime, DateTimeOffsety los tipos numéricos.The CultureInfo class is used either directly or indirectly by classes that format, parse, or manipulate culture-specific data, such as String, DateTime, DateTimeOffset, and the numeric types.

En esta sección:In this section:

Nombres e identificadores de referencia cultural Culture names and identifiers
Referencias culturales invariables, neutras y específicas Invariant, neutral, and specific cultures
de referencias culturales personalizadasCustom cultures
de datos de referencia cultural dinámicaDynamic culture data
CultureInfo y datos culturales la referencia cultural actual y la referencia cultural actual de la interfaz de usuario CultureInfo and cultural data The current culture and current UI culture
Obtener todas las referencias culturales Getting all cultures
Culture y threads Culture and threads
Cultura y dominios de aplicación Culture and application domains
Referencia cultural y operaciones asincrónicas basadas en tareas Culture and task-based asynchronous operations
de serialización de objetos CultureInfoCultureInfo object serialization
Invalidaciones del panel de Control Control Panel overrides
Criterios de ordenación alternativos Alternate sort orders
Cultura y aplicaciones de WindowsCulture and Windows apps

Nombres e identificadores de referencia culturalCulture names and identifiers

La clase CultureInfo especifica un nombre único para cada referencia cultural, basado en RFC 4646.The CultureInfo class specifies a unique name for each culture, based on RFC 4646. El nombre es una combinación de un código de referencia cultural ISO 639 2 en minúsculas asociado a un idioma y un código de referencia cultural ISO 3166 2 Letter en mayúsculas asociado a un país o región.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. Además, en el caso de las aplicaciones que tienen como destino .NET Framework 4.NET Framework 4 o posterior y que se ejecutan en Windows 10 o posterior, se admiten los nombres de referencia cultural que corresponden a etiquetas de idioma BCP-47 válidas.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.

Nota

Cuando se pasa un nombre de referencia cultural a un constructor de clase o a un método como CreateSpecificCulture o CultureInfo, su caso no es significativo.When a culture name is passed to a class constructor or a method such as CreateSpecificCulture or CultureInfo, its case is not significant.

El formato del nombre de la referencia cultural basado en RFC 4646 es languagecode2>-Country/regioncode2, donde languagecode2 es el código de idioma de dos letras y Country/regioncode2 es el código de subreferencia cultural de dos letras.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. Algunos ejemplos son ja-JP para japonés (Japón) y en-US para inglés (Estados Unidos).Examples include ja-JP for Japanese (Japan) and en-US for English (United States). En los casos en los que no hay un código de idioma de dos letras disponible, se usa un código de tres letras derivado de 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.

Tenga en cuenta que algunos nombres de referencia cultural también especifican un script ISO 15924.Note that some culture names also specify an ISO 15924 script. Por ejemplo, Cyrl especifica el script cirílico y latn especifica el alfabeto latino.For example, Cyrl specifies the Cyrillic script and Latn specifies the Latin script. Un nombre de referencia cultural que incluye un script usa el patrón languagecode2-scripttag-Country/regioncode2.A culture name that includes a script uses the pattern languagecode2-scripttag-country/regioncode2. Un ejemplo de este tipo de nombre de referencia cultural es uz-Cyrl-UZ para uzbeko (cirílico, Uzbekistán).An example of this type of culture name is uz-Cyrl-UZ for Uzbek (Cyrillic, Uzbekistan). En los sistemas operativos Windows anteriores a Windows Vista, un nombre de referencia cultural que incluye un script usa el patrón languagecode2-country/regioncode2-scripttag, por ejemplo, UZ-uz-Cyrl para uzbeko (cirílico, Uzbekistán). ).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).

Una referencia cultural neutra solo se especifica con el código de idioma de dos letras en minúscula.A neutral culture is specified by only the two-letter lowercase language code. Por ejemplo, fr especifica la referencia cultural neutra para francés y de especifica la referencia cultural neutra para el alemán.For example, fr specifies the neutral culture for French, and de specifies the neutral culture for German.

Nota

Hay dos nombres de referencia cultural que contradicen esta regla.There are two culture names that contradict this rule. Las referencias culturales chinas (simplificadas), denominadas ZH-Hans y chino (tradicional), denominadas ZH-hant, son referencias culturales neutras.The cultures Chinese (Simplified), named zh-Hans, and Chinese (Traditional), named zh-Hant, are neutral cultures. Los nombres de referencia cultural representan el estándar actual y deben usarse a menos que tenga un motivo para usar los nombres más antiguos ZH-CHS y 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.

Un identificador de referencia cultural es una abreviatura numérica internacional estándar y tiene los componentes necesarios para identificar de forma única una de las referencias culturales instaladas.A culture identifier is a standard international numeric abbreviation and has the components necessary to uniquely identify one of the installed cultures. La aplicación puede usar identificadores de referencia cultural predefinidos o definir identificadores personalizados.Your application can use predefined culture identifiers or define custom identifiers.

Este y otras clases del espacio de nombres System.Globalization usan determinados identificadores y nombres de referencia cultural predefinidos.Certain predefined culture names and identifiers are used by this and other classes in the System.Globalization namespace. Para obtener información detallada sobre la referencia cultural de los sistemas Windows, consulte la columna etiqueta de idioma en la lista de nombres de idioma o región admitidos por Windows.For detailed culture information for Windows systems, see the Language tag column in the list of language/region names supported by Windows. Los nombres de las referencias culturales siguen el estándar definido por BCP 47.Culture names follow the standard defined by BCP 47.

Recuerde que los nombres e identificadores de las referencias culturales solo representan un subconjunto de referencias culturales que se pueden encontrar en un equipo determinado.Remember that the culture names and identifiers represent only a subset of cultures that can be found on a particular computer. Las versiones de Windows o los Service Pack pueden cambiar las referencias culturales disponibles.Windows versions or service packs can change the available cultures. Las aplicaciones agregan referencias culturales personalizadas mediante la clase CultureAndRegionInfoBuilder.Applications add custom cultures using the CultureAndRegionInfoBuilder class. Los usuarios agregan sus propias referencias culturales personalizadas mediante la herramienta Generador de configuración regional de Microsoft.Users add their own custom cultures using the Microsoft Locale Builder tool. El generador de configuración regional de Microsoft se escribe en código administrado mediante la clase CultureAndRegionInfoBuilder.Microsoft Locale Builder is written in managed code using the CultureAndRegionInfoBuilder class.

Varios nombres distintos están estrechamente asociados a una referencia cultural, especialmente los nombres asociados a los siguientes miembros de clase:Several distinct names are closely associated with a culture, notably the names associated with the following class members:

Referencias culturales invariables, neutras y específicasInvariant, neutral, and specific cultures

Generalmente, las referencias culturales se agrupan en tres conjuntos: referencias culturales invariables, referencias culturales neutras y referencias culturales específicas.The cultures are generally grouped into three sets: invariant cultures, neutral cultures, and specific cultures.

Una referencia cultural invariable no tiene en cuenta la referencia cultural.An invariant culture is culture-insensitive. La aplicación especifica la referencia cultural de todos los idiomas por nombre mediante una cadena vacía ("") o por su identificador.Your application specifies the invariant culture by name using an empty string ("") or by its identifier. InvariantCulture define una instancia de la referencia cultural de todos los idiomas.InvariantCulture defines an instance of the invariant culture. Está asociado con el idioma inglés, pero no con ningún país o región.It is associated with the English language but not with any country/region. Se usa en casi cualquier método del espacio de nombres Globalization que requiera una referencia cultural.It is used in almost any method in the Globalization namespace that requires a culture.

Una referencia cultural neutra es una referencia cultural que está asociada a un idioma, pero no a un país o región.A neutral culture is a culture that is associated with a language but not with a country/region. Una referencia cultural específica es una referencia cultural que está asociada a un idioma y a un país o región.A specific culture is a culture that is associated with a language and a country/region. Por ejemplo, fr es el nombre neutro para la referencia cultural francesa y fr-FR es el nombre de la referencia cultural de francés (Francia) específica.For example, fr is the neutral name for the French culture, and fr-FR is the name of the specific French (France) culture. Tenga en cuenta que el chino (simplificado) y el chino (tradicional) también se consideran referencias culturales neutras.Note that Chinese (Simplified) and Chinese (Traditional) are also considered neutral cultures.

No se recomienda crear una instancia de una clase CompareInfo para una referencia cultural neutra porque los datos que contiene son arbitrarios.Creating an instance of a CompareInfo class for a neutral culture is not recommended because the data it contains is arbitrary. Para mostrar y ordenar los datos, especifique el idioma y la región.To display and sort data, specify both the language and region. Además, la propiedad Name de un objeto CompareInfo creado para una referencia cultural neutra solo devuelve el país y no incluye la región.Additionally, the Name property of a CompareInfo object created for a neutral culture returns only the country and does not include the region.

Las referencias culturales definidas tienen una jerarquía en la que el elemento primario de una referencia cultural concreta es una referencia cultural neutra y el elemento primario de una referencia cultural neutra es la referencia cultural de todos los idiomas.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. La propiedad Parent contiene la referencia cultural neutra asociada a una referencia cultural concreta.The Parent property contains the neutral culture associated with a specific culture. Las referencias culturales personalizadas deben definir la propiedad Parent de acuerdo con este patrón.Custom cultures should define the Parent property in conformance with this pattern.

Si los recursos para una referencia cultural específica no están disponibles en el sistema operativo, se usan los recursos para la referencia cultural neutra asociada.If the resources for a specific culture are not available in the operating system, the resources for the associated neutral culture are used. Si los recursos de la referencia cultural neutra no están disponibles, se usan los recursos insertados en el ensamblado principal.If the resources for the neutral culture are not available, the resources embedded in the main assembly are used. Para obtener más información sobre el proceso de reserva de recursos, vea empaquetar e implementar recursos.For more information on the resource fallback process, see Packaging and Deploying Resources.

La lista de configuraciones regionales de la API de Windows es ligeramente diferente de la lista de referencias culturales admitidas por el .NET Framework.The list of locales in the Windows API is slightly different from the list of cultures supported by the .NET Framework. Si se requiere interoperabilidad con Windows, por ejemplo, a través del mecanismo p/Invoke, la aplicación debe usar una referencia cultural específica que se defina para el sistema operativo.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. El uso de la referencia cultural específica garantiza la coherencia con la configuración regional de Windows equivalente, que se identifica con un identificador de configuración regional que es igual que 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.

Solo se puede crear un DateTimeFormatInfo o un NumberFormatInfo para la referencia cultural de todos los idiomas o para referencias culturales específicas, no para referencias culturales neutras.A DateTimeFormatInfo or a NumberFormatInfo can be created only for the invariant culture or for specific cultures, not for neutral cultures.

Si DateTimeFormatInfo.Calendar es el TaiwanCalendar pero el Thread.CurrentCulture no se establece en zh-TW, entonces DateTimeFormatInfo.NativeCalendarName, DateTimeFormatInfo.GetEraNamey DateTimeFormatInfo.GetAbbreviatedEraName devuelven una cadena vacía ("").If DateTimeFormatInfo.Calendar is the TaiwanCalendar but the Thread.CurrentCulture is not set to zh-TW, then DateTimeFormatInfo.NativeCalendarName, DateTimeFormatInfo.GetEraName, and DateTimeFormatInfo.GetAbbreviatedEraName return an empty string ("").

Referencias culturales personalizadasCustom cultures

Además de las referencias culturales predefinidas admitidas por el sistema operativo Windows y el .NET Framework, el .NET Framework admite tres tipos de referencias culturales personalizadas: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:

  • Nuevas referencias culturales que complementan las referencias culturales disponibles en Windows o en el .NET Framework.New cultures that supplement the cultures available in Windows or the .NET Framework. Por ejemplo, una aplicación podría instalar un objeto CultureInfo que represente la referencia cultural FJ-FJ (o fijan (Fiyi)) en un sistema.For example, an application could install a CultureInfo object that represents the fj-FJ (or Fijan (Fiji)) culture on a system.

  • Referencias culturales de reemplazo cuyas propiedades son diferentes de las propiedades de las referencias culturales estándar admitidas por Windows y el .NET Framework.Replacement cultures whose properties are different from the properties of the standard cultures supported by Windows and the .NET Framework.

  • Referencias culturales estándar con invalidaciones de usuario.Standard cultures with user overrides. El usuario puede usar la aplicación de región y de idioma del Panel de control para personalizar los valores de propiedad de una referencia cultural existente.The user can use the Region and Language application in Control Panel to customize an existing culture's property values.

Nota

Puede utilizar la clase CultureAndRegionInfoBuilder para definir, guardar y registrar referencias culturales personalizadas que complementen o reemplacen a las referencias culturales existentes.You can use the CultureAndRegionInfoBuilder class to define, save, and register custom cultures that either supplement or replace existing cultures. El método CultureAndRegionInfoBuilder.Save crea un archivo de lenguaje de marcado de datos (LDML) de configuración regional que se puede usar para instalar una referencia cultural personalizada en los sistemas de destino.The CultureAndRegionInfoBuilder.Save method creates a Locale Data Markup Language (LDML) file that can be used to install a custom culture on target systems. Para obtener información paso a paso sobre cómo usar la clase CultureAndRegionInfoBuilder para crear una referencia cultural nueva o de reemplazo, vea el tema sobre la clase CultureAndRegionInfoBuilder.For step-by step information on using the CultureAndRegionInfoBuilder class to create a new or replacement culture, see the CultureAndRegionInfoBuilder class topic.

Dado que el .NET Framework admite referencias culturales personalizadas, debe tener en cuenta lo siguiente al trabajar con datos específicos de la referencia cultural:Because the .NET Framework supports custom cultures, you should consider the following when working with culture-specific data:

  • Las referencias culturales personalizadas pueden tener valores que superen los intervalos de las referencias culturales predefinidas.Custom cultures can have values that exceed the ranges of the predefined cultures. Por ejemplo, algunas referencias culturales tienen nombres inusualmente largos, formatos de fecha u hora inesperados u otros datos inusuales.For example, some cultures have unusually long month names, unexpected date or time formats, or other unusual data.

  • Al Mostrar datos específicos de la referencia cultural en la interfaz de usuario, debe respetar las personalizaciones del usuario. por ejemplo, el usuario podría querer un reloj de 24 horas o un formato de fecha AAAAMMDD.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.

  • Recuerde que las referencias culturales personalizadas invalidan los valores predeterminados.Remember that custom cultures override default values. Por lo tanto, no puede considerar que los datos de referencia cultural sean estables.Therefore, you cannot consider culture data to be stable. Los nombres de país, los formatos numéricos y de fecha y las correcciones pueden cambiar en el futuro.Country names, number and date formats, and spellings may change in the future. Si desea serializar datos que dependen de la referencia cultural, como cadenas de fecha y hora que se van a pasar a las funciones de análisis de fecha y hora, debe usar la referencia cultural de todos los idiomas o un específico.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 .

El CultureTypes valor de la propiedad de las referencias culturales personalizadas instaladas en un sistema incluye la marca System.Globalization.CultureTypes y se les asigna un valor de propiedad LCID de LOCALE_CUSTOM_UNSPECIFIED (0x1000 o 4096).The CultureTypes property value of custom cultures installed on a system includes the System.Globalization.CultureTypes flag, and custom cultures are assigned an LCID property value of LOCALE_CUSTOM_UNSPECIFIED (0x1000, or 4096). Tenga en cuenta que, a partir de Windows 10, este valor también se asigna a las referencias culturales definidas por el sistema que carecen de datos culturales completos.Note that, starting with Windows 10, this value is also assigned to system-defined cultures that lack complete cultural data.

CultureInfo y datos culturalesCultureInfo and cultural data

.NET deriva sus datos culturales de uno de los diversos orígenes, en función de la implementación, la plataforma y la versión:.NET derives its cultural data from a one of a variety of sources, depending on implementation, platform, and version:

  • En .NET Framework 3,5 y versiones anteriores, los datos culturales son proporcionados por el sistema operativo Windows y el .NET Framework.In .NET Framework 3.5 and earlier versions, cultural data is provided by both the Windows operating system and the .NET Framework.

  • En .NET Framework 4 y versiones posteriores, el sistema operativo Windows proporciona los datos culturales.In .NET Framework 4 and later versions, cultural data is provided by the Windows operating system.

  • En todas las versiones de .NET Core que se ejecutan en Windows, el sistema operativo Windows proporciona los datos culturales.In all versions of .NET Core running on Windows, cultural data is provided by the Windows operating system.

  • En todas las versiones de .NET Core que se ejecutan en plataformas UNIX, los datos culturales se proporcionan mediante la biblioteca de componentes internacionales para Unicode (ICU).In all versions of .NET Core running on Unix platforms, cultural data is provided by the International Components for Unicode (ICU) Library. La versión específica de la biblioteca ICU depende del sistema operativo individual.The specific version of the ICU Library depends on the individual operating system.

Por este motivo, es posible que una referencia cultural disponible en una implementación, plataforma o versión de .NET determinada no esté disponible en una implementación, plataforma o versión de .NET diferente.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.

Algunos objetos de CultureInfo difieren en función de la plataforma subyacente.Some CultureInfo objects differ depending on the underlying platform. En concreto, "zh-CN", o chino (simplificado, China) y zh-TW, o chino (tradicional, Taiwán), son referencias culturales disponibles en los sistemas Windows, pero son referencias culturales con alias en sistemas 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" es un alias para la referencia cultural "ZH-Hans-CN" y "zh-TW" es un alias para la referencia cultural "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. Las referencias culturales con alias no se devuelven mediante llamadas al método GetCultures y pueden tener valores de propiedad diferentes, incluidas distintas referencias culturales de Parent, que sus homólogos de 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. En el caso de las referencias culturales zh-CN y zh-TW, entre estas differenes se incluyen las siguientes:For the zh-CN and zh-TW cultures, these differenes include the following:

  • En los sistemas Windows, la referencia cultural principal de la referencia cultural "zh-CN" es "ZH-Hans" y la referencia cultural principal de la referencia cultural "zh-TW" es "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". La referencia cultural principal de ambas referencias culturales es "ZH".The parent culture of both these cultures is "zh". En los sistemas UNIX, los elementos primarios de ambas referencias culturales son "ZH".On Unix systems, the parents of both cultures are "zh". Esto significa que, si no se proporcionan recursos específicos de la referencia cultural para las referencias culturales "zh-CN" o "zh-TW", pero se proporcionan recursos para la referencia cultural neutra "ZH-Hans" o "ZH-hant", la aplicación cargará los recursos para la referencia cultural neutra en Windows, pero no en 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. En los sistemas UNIX, debe establecer explícitamente el CurrentUICulture del subproceso en "ZH-Hans" o "ZH-hant".On Unix systems, you must explicitly set the thread's CurrentUICulture to either "zh-Hans" or "zh-Hant".

  • En los sistemas Windows, al llamar a CultureInfo.Equals en una instancia que representa la referencia cultural "zh-CN" y pasarle una instancia de "ZH-Hans-CN", se devuelve true.On Windows systems, calling CultureInfo.Equals on an instance that represents the "zh-CN" culture and passing it a "zh-Hans-CN" instance returns true. En los sistemas UNIX, la llamada al método devuelve false.On Unix systems, the method call returns false. Este comportamiento también se aplica a llamar a Equals en una instancia de CultureInfo "zh-TW" y pasarle una instancia de "ZH-hant-TW".This behavior also applies to calling Equals on a "zh-TW" CultureInfo instance and passing it a "zh-Hant-Tw" instance.

Datos de referencia cultural dinámicaDynamic culture data

A excepción de la referencia cultural de todos los idiomas, los datos de la referencia cultural son dinámicos.Except for the invariant culture, culture data is dynamic. Esto es así incluso para las referencias culturales predefinidas.This is true even for the predefined cultures. Por ejemplo, los países o regiones adoptan nuevas monedas, cambian sus ortografías o cambian su calendario preferido, y las definiciones de referencia cultural cambian para realizar el seguimiento.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. Las referencias culturales personalizadas están sujetas a cambios sin previo aviso y cualquier referencia cultural específica podría ser invalidada por una referencia cultural de reemplazo personalizada.Custom cultures are subject to change without notice, and any specific culture might be overridden by a custom replacement culture. Además, como se describe a continuación, un usuario individual puede invalidar las preferencias culturales.Also, as discussed below, an individual user can override cultural preferences. Las aplicaciones siempre deben obtener datos de referencia cultural en tiempo de ejecución.Applications should always obtain culture data at run time.

Precaución

Al guardar los datos, la aplicación debe usar la referencia cultural de todos los idiomas, un formato binario o un formato específico de la referencia cultural.When saving data, your application should use the invariant culture, a binary format, or a specific culture-independent format. Los datos guardados de acuerdo con los valores actuales asociados a una referencia cultural determinada, que no sea la referencia cultural de todos los idiomas, podrían ser ilegibles o podrían cambiar en lo que se refiere a la referencia cultural.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.

Referencia cultural actual y referencia cultural de la interfaz de usuario actualThe current culture and current UI culture

Cada subproceso de una aplicación .NET tiene una referencia cultural actual y una referencia cultural de interfaz de usuario actual.Every thread in a .NET application has a current culture and a current UI culture. La referencia cultural actual determina las convenciones de formato para las fechas, las horas, los números y los valores de moneda, el criterio de ordenación del texto, las convenciones de mayúsculas y minúsculas, y las formas en las que se comparan las cadenas.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. La referencia cultural actual de la interfaz de usuario se usa para recuperar recursos específicos de la referencia cultural en tiempo de ejecución.The current UI culture is used to retrieve culture-specific resources at runtime.

Nota

Para obtener información sobre cómo se determina la referencia cultural actual y actual de la interfaz de usuario para cada subproceso, consulte la sección Culture y threads .For information on how the current and current UI culture is determined on a per-thread basis, see the Culture and threads section. Para obtener información sobre cómo se determina la referencia cultural actual y actual de la interfaz de usuario en los subprocesos que se ejecutan en un nuevo dominio de aplicación y en los subprocesos que cruzan los límites del dominio de aplicación, vea la sección cultura y dominios de aplicación .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. Para obtener información sobre cómo se determina el actual y el actual en subprocesos que realizan operaciones asincrónicas basadas en tareas, vea la sección sobre las operaciones de referencia cultural y asincrónica basada en tareas .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.

Para obtener información más detallada sobre la referencia cultural actual, vea el tema sobre la propiedad CultureInfo.CurrentCulture.For more detailed information on the current culture, see the CultureInfo.CurrentCulture property topic. Para obtener información más detallada sobre la referencia cultural de la interfaz de usuario actual, vea el tema sobre la propiedad CultureInfo.CurrentUICulture.For more detailed information on the current UI culture, see the CultureInfo.CurrentUICulture property topic.

Recuperar las referencias culturales actuales y actuales de la interfaz de usuarioRetrieving the current and current UI cultures

Puede obtener un objeto CultureInfo que representa la referencia cultural actual de una de estas dos maneras:You can get a CultureInfo object that represents the current culture in either of two ways:

En el ejemplo siguiente se recuperan ambos valores de propiedad, se comparan para mostrar que son iguales y se muestra el nombre de la referencia cultural actual.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

Puede obtener un objeto CultureInfo que representa la referencia cultural actual de la interfaz de usuario de una de estas dos maneras:You can get a CultureInfo object that represents the current UI culture in either of two ways:

En el ejemplo siguiente se recuperan ambos valores de propiedad, se comparan para mostrar que son iguales y se muestra el nombre de la referencia cultural de la interfaz de usuario actual.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

Establecer las referencias culturales actuales y actuales de la interfaz de usuarioSetting the current and current UI cultures

Para cambiar la referencia cultural y la referencia cultural de la interfaz de usuario de un subproceso, haga lo siguiente:To change the culture and UI culture of a thread, do the following:

  1. Cree una instancia de un objeto CultureInfo que represente esa referencia cultural llamando a un constructor de clase CultureInfo y pasándole el nombre de la referencia cultural.Instantiate a CultureInfo object that represents that culture by calling a CultureInfo class constructor and passing it the name of the culture. El constructor CultureInfo(String) crea una instancia de un objeto CultureInfo que refleja las invalidaciones de usuario si la nueva referencia cultural es igual que la referencia cultural actual de Windows.The CultureInfo(String) constructor instantiates a CultureInfo object that reflects user overrides if the new culture is the same as the current Windows culture. El constructor CultureInfo(String, Boolean) permite especificar si el objeto de CultureInfo recién creado refleja las invalidaciones de usuario si la nueva referencia cultural es igual que la referencia cultural actual de Windows.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. Asigne el objeto CultureInfo a la propiedad CultureInfo.CurrentCulture o CultureInfo.CurrentUICulture en .NET Core y .NET Framework 4,6 y versiones posteriores.Assign the CultureInfo object to the CultureInfo.CurrentCulture or CultureInfo.CurrentUICulture property on .NET Core and .NET Framework 4.6 and later versions. (En .NET Framework 4.5.2 y versiones anteriores, YOUC asignar el CultureInfo objeto a la propiedad Thread.CurrentCulture o 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.)

En el ejemplo siguiente se recupera la referencia cultural actual.The following example retrieves the current culture. Si es distinto de la referencia cultural francés (Francia), cambia la referencia cultural actual a francés (Francia).If it is anything other than the French (France) culture, it changes the current culture to French (France). De lo contrario, cambia la referencia cultural actual a francés (Luxemburgo).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

En el ejemplo siguiente se recupera la referencia cultural actual.The following example retrieves the current culture. Si se trata de cualquier otra referencia cultural de esloveno (Eslovenia), cambia la referencia cultural actual a esloveno (Eslovenia).If it is anything other the Slovenian (Slovenia) culture, it changes the current culture to Slovenian (Slovenia). De lo contrario, cambia la referencia cultural actual a croata (Croacia).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

Obtener todas las referencias culturalesGetting all cultures

Puede recuperar una matriz de categorías específicas de referencias culturales o de todas las referencias culturales disponibles en el equipo local llamando al método 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. Por ejemplo, puede recuperar referencias culturales personalizadas, referencias culturales específicas o referencias culturales neutras solas o en combinación.For example, you can retrieve custom cultures, specific cultures, or neutral cultures either alone or in combination.

En el ejemplo siguiente se llama al método GetCultures dos veces, primero con el miembro de enumeración System.Globalization.CultureTypes para recuperar todas las referencias culturales personalizadas y, a continuación, con el miembro de enumeración System.Globalization.CultureTypes para recuperar todas las referencias culturales de reemplazo.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.

Referencia cultural y subprocesosCulture and threads

Cuando se inicia un nuevo subproceso de aplicación, su referencia cultural actual y la referencia cultural actual de la interfaz de usuario se definen mediante la referencia cultural del sistema actual, y no la referencia cultural del subproceso actual.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. En el siguiente ejemplo se ilustra la diferencia.The following example illustrates the difference. Establece la referencia cultural actual y la referencia cultural actual de la interfaz de usuario de un subproceso de aplicación en la referencia cultural de francés (Francia) (fr-FR).It sets the current culture and current UI culture of an application thread to the French (France) culture (fr-FR). Si la referencia cultural actual ya es fr-FR, en el ejemplo se establece en la referencia cultural inglés (Estados Unidos) (en-US).If the current culture is already fr-FR, the example sets it to the English (United States) culture (en-US). Muestra tres números aleatorios como valores de moneda y, a su vez, crea un nuevo subproceso, que, a su vez, muestra tres números más aleatorios como valores de moneda.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. Pero como se muestra en la salida del ejemplo, los valores de moneda que muestra el nuevo subproceso no reflejan las convenciones de formato de la referencia cultural de francés (Francia), a diferencia de la salida del subproceso principal de la aplicación.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

En las versiones de la .NET Framework antes del .NET Framework 4.5.NET Framework 4.5, la forma más común de asegurarse de que el subproceso de aplicación principal comparte la misma referencia cultural con todos los demás subprocesos de trabajo es pasar el nombre de la referencia cultural en toda la aplicación o un objeto CultureInfo que representa referencia cultural de toda la aplicación a un delegado de 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. En el ejemplo siguiente se usa este enfoque para asegurarse de que los valores de moneda mostrados por dos subprocesos reflejan las convenciones de formato de la misma referencia cultural.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 €

Puede establecer la referencia cultural y la referencia cultural de la interfaz de usuario de los subprocesos del grupo de subprocesos de una manera similar llamando al método 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.

A partir de la .NET Framework 4.5.NET Framework 4.5, puede establecer la referencia cultural y la referencia cultural de la interfaz de usuario de todos los subprocesos de un dominio de aplicación más directamente asignando un objeto CultureInfo que representa esa referencia cultural a las propiedades DefaultThreadCurrentCulture y 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. En el ejemplo siguiente se usan estas propiedades para asegurarse de que todos los subprocesos del dominio de aplicación predeterminado comparten la misma referencia cultural.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 €

Advertencia

Aunque las propiedades DefaultThreadCurrentCulture y DefaultThreadCurrentUICulture son miembros estáticos, definen la referencia cultural predeterminada y la referencia cultural de la interfaz de usuario predeterminada solo para el dominio de aplicación que es actual en el momento en que se establecen estos valores de propiedad.Although the DefaultThreadCurrentCulture and DefaultThreadCurrentUICulture properties are static members, they define the default culture and default UI culture only for the application domain that is current at the time these property values are set. Para obtener más información, vea la sección siguiente, la referencia cultural y los dominios de aplicación.For more information, see the next section, Culture and application domains.

Cuando se asignan valores a las propiedades DefaultThreadCurrentCulture y DefaultThreadCurrentUICulture, también cambian la referencia cultural y la referencia cultural de la interfaz de usuario de los subprocesos del dominio de aplicación si no se les ha asignado explícitamente una referencia cultural.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. Sin embargo, estos subprocesos reflejan la nueva configuración de referencia cultural solo mientras se ejecutan en el dominio de aplicación actual.However, these threads reflect the new culture settings only while they execute in the current application domain. Si estos subprocesos se ejecutan en otro dominio de aplicación, su referencia cultural se convierte en la referencia cultural predeterminada definida para ese dominio de aplicación.If these threads execute in another application domain, their culture becomes the default culture defined for that application domain. Como resultado, se recomienda establecer siempre la referencia cultural del subproceso de aplicación principal y no basarse en las propiedades DefaultThreadCurrentCulture y DefaultThreadCurrentUICulture para cambiarla.As a result, we recommend that you always set the culture of the main application thread, and not rely on the DefaultThreadCurrentCulture and DefaultThreadCurrentUICulture properties to change it.

Cultura y dominios de aplicaciónCulture and application domains

DefaultThreadCurrentCulture y DefaultThreadCurrentUICulture son propiedades estáticas que definen explícitamente una referencia cultural predeterminada solo para el dominio de aplicación que es actual cuando se establece o recupera el valor de propiedad.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. En el ejemplo siguiente se establece la referencia cultural predeterminada y la referencia cultural de la interfaz de usuario predeterminada en el dominio de aplicación predeterminado en francés (Francia) y, a continuación, se usa la clase AppDomainSetup y el delegado AppDomainInitializer para establecer la referencia cultural predeterminada y la referencia cultural de la interfaz de usuario en un nuevo dominio de aplicación en ruso ( Rusia).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). Después, un único subproceso ejecuta dos métodos en cada dominio de aplicación.A single thread then executes two methods in each application domain. Tenga en cuenta que la referencia cultural del subproceso y la referencia cultural de la interfaz de usuario no se establecen explícitamente. se derivan de la referencia cultural predeterminada y la referencia cultural de la interfaz de usuario del dominio de aplicación en el que se ejecuta el subproceso.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. Tenga en cuenta también que las propiedades DefaultThreadCurrentCulture y DefaultThreadCurrentUICulture devuelven los valores de CultureInfo predeterminados del dominio de aplicación que es actual cuando se realiza la llamada al método.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

Para obtener más información sobre las referencias culturales y los dominios de aplicación, vea la sección "dominios de aplicación y subprocesos" en el tema dominios de aplicación .For more information about cultures and application domains, see the "Application Domains and Threads" section in the Application Domains topic.

Referencia cultural y operaciones asincrónicas basadas en tareasCulture and task-based asynchronous operations

El modelo de programación asincrónica basado en tareas utiliza Task y Task<TResult> objetos para ejecutar de forma asincrónica los delegados en subprocesos del grupo de subprocesos.The task-based asynchronous programming pattern uses Task and Task<TResult> objects to asynchronously execute delegates on thread pool threads. El subproceso concreto en el que se ejecuta una tarea determinada no se conoce de antemano, sino que solo se determina en tiempo de ejecución.The specific thread on which a particular task runs is not known in advance, but is determined only at runtime.

En el caso de las aplicaciones que tienen como destino la .NET Framework 4.6.NET Framework 4.6 o versiones posteriores, la referencia cultural es parte del contexto de una operación asincrónica.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. En otras palabras, a partir de las aplicaciones que tienen como destino el .NET Framework 4.6.NET Framework 4.6, las operaciones asincrónicas heredan de forma predeterminada los valores de las propiedades CurrentCulture y CurrentUICulture del subproceso desde el que se inician.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. Si la referencia cultural actual o la referencia cultural de la interfaz de usuario actual difiere de la referencia cultural del sistema, la referencia cultural actual cruza los límites del subproceso y se convierte en la referencia cultural actual del subproceso del grupo de subprocesos que ejecuta una operación asincrónica.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.

Esto se muestra en el ejemplo siguiente.The following example provides a simple illustration. Utiliza el atributo TargetFrameworkAttribute para establecer como destino el .NET Framework 4.6.NET Framework 4.6.It uses the TargetFrameworkAttribute attribute to target the .NET Framework 4.6.NET Framework 4.6. En el ejemplo se define un delegado de Func<TResult>, formatDelegate, que devuelve algunos números con formato de valores de moneda.The example defines a Func<TResult> delegate, formatDelegate, that returns some numbers formatted as currency values. En el ejemplo se cambia la referencia cultural del sistema actual a francés (Francia) o, si el francés (Francia) ya es la referencia cultural actual, en inglés (Estados Unidos).The example changes the current system culture to either French (France) or, if French (France) is already the current culture, English (United States). A continuación:It then:

  • Invoca el delegado directamente para que se ejecute de forma sincrónica en el subproceso de la aplicación principal.Invokes the delegate directly so that it runs synchronously on the main app thread.

  • Crea una tarea que ejecuta el delegado de forma asincrónica en un subproceso del grupo de subprocesos.Creates a task that executes the delegate asynchronously on a thread pool thread.

  • Crea una tarea que ejecuta el delegado sincrónicamente en el subproceso de la aplicación principal llamando al método Task.RunSynchronously.Creates a task that executes the delegate synchronously on the main app thread by calling the Task.RunSynchronously method.

Como muestra la salida del ejemplo, cuando se cambia la referencia cultural actual a francés (Francia), la referencia cultural actual del subproceso desde el que se invocan las tareas de forma asincrónica se convierte en la referencia cultural actual de esa operación asincrónica.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 €

En el caso de las aplicaciones que tienen como destino versiones de .NET Framework antes de la .NET Framework 4.6.NET Framework 4.6, o para aplicaciones que no tienen como destino una versión determinada de la .NET Framework, la referencia cultural del subproceso que realiza la llamada no forma parte del contexto de una tarea.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. En su lugar, a menos que se defina explícitamente, la referencia cultural de los nuevos subprocesos de forma predeterminada es la referencia cultural del sistema.Instead, unless one is explicitly defined, the culture of new threads by default is the system culture. En el ejemplo siguiente, que es idéntico al ejemplo anterior, salvo que falta el atributo TargetFrameworkAttribute, ilustra esto.The following example, which is identical to the previous example except that it lacks the TargetFrameworkAttribute attribute, illustrates this. Dado que la referencia cultural del sistema del sistema en el que se ejecutó el ejemplo es inglés (Estados Unidos), la referencia cultural de la tarea que se ejecuta de forma asincrónica en un subproceso del grupo de subprocesos es en-US en lugar de 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 €

En el caso de las aplicaciones destinadas a versiones del .NET Framework desde la .NET Framework 4.5.NET Framework 4.5 y versiones posteriores, pero antes de la .NET Framework 4.6.NET Framework 4.6, puede usar las propiedades DefaultThreadCurrentCulture y DefaultThreadCurrentUICulture para asegurarse de que la referencia cultural del subproceso que realiza la llamada se usa en tareas asincrónicas que se ejecutan en el grupo de subprocesos. ThreadPool.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. El ejemplo siguiente es idéntico al ejemplo anterior, salvo que usa la propiedad DefaultThreadCurrentCulture para asegurarse de que los subprocesos del grupo de subprocesos tienen la misma referencia cultural que el subproceso de la aplicación principal.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 y DefaultThreadCurrentUICulture son propiedades de dominio por aplicación; es decir, establecen una referencia cultural predeterminada para todos los subprocesos que no tienen asignada explícitamente una referencia cultural en un dominio de aplicación concreto.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. Sin embargo, en el caso de las aplicaciones que tienen como destino .NET Framework 4.6.NET Framework 4.6 o posterior, la referencia cultural del subproceso que realiza la llamada sigue formando parte del contexto de una tarea asincrónica aunque la tarea cruce los límites del dominio de aplicación.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.

En el ejemplo siguiente se muestra que la referencia cultural del subproceso que realiza la llamada sigue siendo la referencia cultural actual de una operación asincrónica basada en tareas incluso si el método que ejecuta la tarea cruza los límites del dominio de aplicación.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. Define una clase, DataRetriever, con un único método, GetFormattedNumber, que devuelve un número de punto flotante de precisión doble aleatorio entre 1 y 1.000 con formato de valor de moneda.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. Se ejecuta una primera tarea que simplemente crea instancias de una instancia de DataRetriever y llama a su método GetFormattedNumber.A first task is run that simply instantiates a DataRetriever instance and calls its GetFormattedNumber method. Una segunda tarea informa de su dominio de aplicación actual, crea un nuevo dominio de aplicación, crea instancias de una instancia de DataRetriever en el nuevo dominio de aplicación y llama a su método 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. Como muestra la salida del ejemplo, la referencia cultural actual ha permanecido igual en el subproceso que realiza la llamada, la primera tarea y la segunda tarea cuando se estaba ejecutando en el dominio de aplicación principal y en el segundo dominio de aplicación.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 €

Serialización de objetos CultureInfoCultureInfo object serialization

Cuando se serializa un objeto de CultureInfo, lo que realmente se almacena es Name y UseUserOverride.When a CultureInfo object is serialized, all that is actually stored is Name and UseUserOverride. Se deserializa correctamente solo en un entorno en el que el Name tiene el mismo significado.It is successfully de-serialized only in an environment where that Name has the same meaning. Los tres ejemplos siguientes muestran por qué esto no es siempre el caso:The following three examples show why this is not always the case:

  • Si el valor de la propiedad CultureTypes es CultureTypes.InstalledWin32Cultures, y si esa referencia cultural se incluyó por primera vez en una determinada versión del sistema operativo Windows, no es posible deserializarla en una versión anterior de Windows.If the CultureTypes property value is CultureTypes.InstalledWin32Cultures, and if that culture was first introduced in a particular version of the Windows operating system, it is not possible to deserialize it on an earlier version of Windows. Por ejemplo, si se presentó una referencia cultural en Windows 10, no se puede deserializar en Windows 8.For example, if a culture was introduced in Windows 10, it cannot be deserialized on Windows 8.

  • Si el valor de CultureTypes es CultureTypes.UserCustomCulturey el equipo en el que se ha deserializado no tiene instalada la referencia cultural personalizada del usuario, no es posible deserializarla.If the CultureTypes value is CultureTypes.UserCustomCulture, and the computer on which it is de-serialized does not have this user custom culture installed, it is not possible to deserialize it.

  • Si el valor CultureTypes es CultureTypes.ReplacementCulturesy el equipo en el que se ha deserializado no tiene esta referencia cultural de reemplazo, se deserializa en el mismo nombre, pero no en todas las mismas características.If the CultureTypes value is CultureTypes.ReplacementCultures, and the computer on which it is de-serialized does not have this replacement culture, it de-serializes to the same name, but not all of the same characteristics. Por ejemplo, si en-US es una referencia cultural de reemplazo en el equipo A, pero no en el equipo B, y si un objeto CultureInfo que hace referencia a esta referencia cultural se serializa en el equipo A y se deserializa en el equipo B, no se transmite ninguna de las características personalizadas de la referencia cultural.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. La referencia cultural se deserializa correctamente, pero con un significado diferente.The culture deserializes successfully, but with a different meaning.

Invalidaciones del panel de controlControl Panel overrides

El usuario puede optar por invalidar algunos de los valores asociados a la referencia cultural actual de Windows a través de la parte de opciones de idioma y configuración regional del panel de control.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. Por ejemplo, el usuario podría elegir mostrar la fecha en un formato diferente o utilizar una moneda distinta de la predeterminada para la referencia cultural.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. En general, las aplicaciones deben cumplir estas invalidaciones de usuario.In general, your applications should honor these user overrides.

Si UseUserOverride se true y la referencia cultural especificada coincide con la referencia cultural actual de Windows, el CultureInfo utiliza esas invalidaciones, incluida la configuración de usuario para las propiedades de la instancia de DateTimeFormatInfo devuelta por la propiedad DateTimeFormat y las propiedades de la NumberFormatInfo instancia de devuelta por la propiedad 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. Si la configuración del usuario es incompatible con la referencia cultural asociada al CultureInfo, por ejemplo, si el calendario seleccionado no es ninguno de los OptionalCalendars, los resultados de los métodos y los valores de las propiedades son indefinidos.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.

Criterios de ordenación alternativosAlternate sort orders

Algunas referencias culturales admiten más de un criterio de ordenación.Some cultures support more than one sort order. Por ejemplo:For example:

  • La referencia cultural de Español (España) tiene dos criterios de ordenación: el criterio de ordenación internacional predeterminado y el criterio de ordenación tradicional.The Spanish (Spain) culture has two sort orders: the default international sort order, and the traditional sort order. Al crear una instancia de un objeto CultureInfo con el nombre de referencia cultural es-ES, se usa el criterio de ordenación internacional.When you instantiate a CultureInfo object with the es-ES culture name, the international sort order is used. Al crear una instancia de un objeto CultureInfo con el nombre de referencia cultural es-ES-tradnl, se usa el criterio de ordenación tradicional.When you instantiate a CultureInfo object with the es-ES-tradnl culture name, the traditional sort order is used.

  • La referencia cultural zh-CN (chino simplificado, PRC)) admite dos criterios de ordenación: por Pronunciación (el valor predeterminado) y por recuento de trazos.The zh-CN (Chinese (Simplified, PRC)) culture supports two sort orders: by pronunciation (the default) and by stroke count. Al crear una instancia de un objeto CultureInfo con el nombre de la referencia cultural zh-CN, se usa el criterio de ordenación predeterminado.When you instantiate a CultureInfo object with the zh-CN culture name, the default sort order is used. Al crear una instancia de un objeto CultureInfo con un identificador local de 0x00020804, las cadenas se ordenan por número de trazos.When you instantiate a CultureInfo object with a local identifier of 0x00020804, strings are sorted by stroke count.

En la tabla siguiente se enumeran las referencias culturales que admiten criterios de ordenación alternativos, y los identificadores para los criterios de ordenación predeterminados y alternativos.The following table lists the cultures that support alternate sort orders and the identifiers for the default and alternate sort orders.

Nombre de referencia culturalCulture name cultureCulture Nombre e identificador de ordenación predeterminadaDefault sort name and identifier Nombre e identificador de ordenación alternativaAlternate sort name and identifier
es-ESes-ES Español (España)Spanish (Spain) Internacional: 0x00000C0AInternational: 0x00000C0A Tradicional: 0x0000040ATraditional: 0x0000040A
zh-TWzh-TW Chino (Taiwán)Chinese (Taiwan) Número de trazos: 0x00000404Stroke Count: 0x00000404 Bopomofo: 0x00030404Bopomofo: 0x00030404
zh-CNzh-CN Chino (RPC)Chinese (PRC) Pronunciación: 0x00000804Pronunciation: 0x00000804 Número de trazos: 0x00020804Stroke Count: 0x00020804
zh-HKzh-HK Chino (Zona administrativa especial de Hong Kong)Chinese (Hong Kong SAR) Número de trazos: 0x00000c04Stroke Count: 0x00000c04 Número de trazos: 0x00020c04Stroke Count: 0x00020c04
zh-sgzh-SG Chino (Singapur)Chinese (Singapore) Pronunciación: 0x00001004Pronunciation: 0x00001004 Número de trazos: 0x00021004Stroke Count: 0x00021004
zh-MOzh-MO Chino (Macao RAE)Chinese (Macao SAR) Pronunciación: 0x00001404Pronunciation: 0x00001404 Número de trazos: 0x00021404Stroke Count: 0x00021404
ja-JPja-JP Japonés (Japón)Japanese (Japan) Predeterminada: 0x00000411Default: 0x00000411 Unicode: 0x00010411Unicode: 0x00010411
ko-KRko-KR Coreano (Corea)Korean (Korea) Predeterminada: 0x00000412Default: 0x00000412 Xwansung coreano - Unicode: 0x00010412Korean Xwansung - Unicode: 0x00010412
de-DEde-DE Alemán (Alemania)German (Germany) Diccionario: 0x00000407Dictionary: 0x00000407 Ordenación de libreta de teléfonos DIN: 0x00010407Phone Book Sort DIN: 0x00010407
hu-HUhu-HU Húngaro (Hungría)Hungarian (Hungary) Predeterminada: 0x0000040eDefault: 0x0000040e Ordenación técnica: 0x0001040eTechnical Sort: 0x0001040e
ka-GEka-GE Georgiano (Georgia)Georgian (Georgia) Tradicional: 0x00000437Traditional: 0x00000437 Alfabetización internacional: 0x00010437Modern Sort: 0x00010437

La referencia cultural actual y las aplicaciones para UWPThe current culture and UWP apps

En las aplicaciones Plataforma universal de Windows (UWP), las propiedades CurrentCulture y CurrentUICulture son de lectura y escritura, al igual que en las aplicaciones .NET Framework y .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. Sin embargo, las aplicaciones UWP reconocen una sola referencia cultural.However, UWP apps recognize a single culture. Las propiedades CurrentCulture y CurrentUICulture se asignan al primer valor de la colección Windows. ApplicationModel. Resources. Core. ResourceManager. DefaultContext. Languages .The CurrentCulture and CurrentUICulture properties map to the first value in the Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages collection.

En .NET Framework y en las aplicaciones de .NET Core, la referencia cultural actual es una configuración por subproceso y las propiedades CurrentCulture y CurrentUICulture solo reflejan la referencia cultural y la referencia cultural de la interfaz de usuario del subproceso actual.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. En las aplicaciones para UWP, la referencia cultural actual se asigna a la colección Windows. ApplicationModel. Resources. Core. ResourceManager. DefaultContext. Languages , que es una configuración global.In UWP apps, the current culture maps to the Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages collection, which is a global setting. Establecer la propiedad CurrentCulture o CurrentUICulture cambia la referencia cultural de toda la aplicación; no se puede establecer la referencia cultural por subproceso.Setting the CurrentCulture or CurrentUICulture property changes the culture of the entire app; culture cannot be set on a per-thread basis.

Constructores

CultureInfo(Int32)

Inicializa una nueva instancia de la clase CultureInfo de acuerdo con la referencia cultural especificada por el identificador de dicha referencia.Initializes a new instance of the CultureInfo class based on the culture specified by the culture identifier.

CultureInfo(Int32, Boolean)

Inicializa una nueva instancia de la clase CultureInfo de acuerdo con la referencia cultural especificada por el identificador y con el valor booleano que especifica si se va a utilizar la configuración de referencia cultural del sistema seleccionada por el usuario.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)

Inicializa una nueva instancia de la clase CultureInfo de acuerdo con la referencia cultural especificada mediante un nombre.Initializes a new instance of the CultureInfo class based on the culture specified by name.

CultureInfo(String, Boolean)

Inicializa una nueva instancia de la clase CultureInfo de acuerdo con la referencia cultural especificada mediante un nombre y con el valor booleano que indica si se va a utilizar la configuración de referencia cultural del sistema seleccionada por el usuario.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.

Propiedades

Calendar

Obtiene el calendario predeterminado utilizado por la referencia cultural.Gets the default calendar used by the culture.

CompareInfo

Obtiene el objeto CompareInfo que define el modo en que se comparan las cadenas para la referencia cultural.Gets the CompareInfo that defines how to compare strings for the culture.

CultureTypes

Obtiene los tipos de referencia cultural que pertenecen al objeto CultureInfo actual.Gets the culture types that pertain to the current CultureInfo object.

CurrentCulture

Obtiene o establece el objeto CultureInfo que representa la referencia cultural utilizada por el subproceso actual.Gets or sets the CultureInfo object that represents the culture used by the current thread.

CurrentUICulture

Obtiene o establece el objeto CultureInfo que representa la referencia cultural de la interfaz de usuario actual utilizada por el Administrador de recursos para buscar los recursos específicos de la referencia cultural en tiempo de ejecución.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

Obtiene o establece un objeto DateTimeFormatInfo que define el formato de presentación de fechas y horas culturalmente apropiado.Gets or sets a DateTimeFormatInfo that defines the culturally appropriate format of displaying dates and times.

DefaultThreadCurrentCulture

Obtiene o establece la referencia cultural predeterminada para los subprocesos del dominio de aplicación actual.Gets or sets the default culture for threads in the current application domain.

DefaultThreadCurrentUICulture

Obtiene o establece la referencia cultural predeterminada de la interfaz de usuario para los subprocesos del dominio de aplicación actual.Gets or sets the default UI culture for threads in the current application domain.

DisplayName

Obtiene el nombre de referencia cultural localizado completo.Gets the full localized culture name.

EnglishName

Obtiene el nombre de la referencia cultural en el formato languagefull [country/regionfull] en inglés.Gets the culture name in the format languagefull [country/regionfull] in English.

IetfLanguageTag

Desusado.Deprecated. Obtiene la identificación del estándar RFC 4646 de un idioma.Gets the RFC 4646 standard identification for a language.

InstalledUICulture

Obtiene el objeto CultureInfo que representa la referencia cultural instalada con el sistema operativo.Gets the CultureInfo that represents the culture installed with the operating system.

InvariantCulture

Obtiene el objeto CultureInfo que es independiente de la referencia cultural (invariable).Gets the CultureInfo object that is culture-independent (invariant).

IsNeutralCulture

Obtiene un valor que indica si el CultureInfo actual representa una referencia cultural neutra.Gets a value indicating whether the current CultureInfo represents a neutral culture.

IsReadOnly

Obtiene un valor que indica si el CultureInfo actual es de solo lectura.Gets a value indicating whether the current CultureInfo is read-only.

KeyboardLayoutId

Obtiene el identificador de configuración regional de entrada activo.Gets the active input locale identifier.

LCID

Obtiene el identificador de referencia cultural del objeto CultureInfo actual.Gets the culture identifier for the current CultureInfo.

Name

Obtiene el nombre de la referencia cultural en el formato languagecode2-country/regioncode2.Gets the culture name in the format languagecode2-country/regioncode2.

NativeName

Obtiene el nombre de la referencia cultural, que consta del idioma, país o región y alfabeto opcional establecidos para que los muestre la referencia cultural.Gets the culture name, consisting of the language, the country/region, and the optional script, that the culture is set to display.

NumberFormat

Obtiene o establece un objeto NumberFormatInfo que define el formato de presentación de números, moneda y porcentaje culturalmente apropiado.Gets or sets a NumberFormatInfo that defines the culturally appropriate format of displaying numbers, currency, and percentage.

OptionalCalendars

Obtiene la lista de calendarios que puede utilizar la referencia cultural.Gets the list of calendars that can be used by the culture.

Parent

Obtiene el objeto CultureInfo que representa la referencia cultural principal del CultureInfo actual.Gets the CultureInfo that represents the parent culture of the current CultureInfo.

TextInfo

Obtiene el objeto TextInfo que define el sistema de escritura asociado a la referencia cultural.Gets the TextInfo that defines the writing system associated with the culture.

ThreeLetterISOLanguageName

Obtiene el código de tres letras ISO 639-2 del idioma del objetoCultureInfo actual.Gets the ISO 639-2 three-letter code for the language of the current CultureInfo.

ThreeLetterWindowsLanguageName

Obtiene el código de tres letras del idioma tal como se ha definido en la API de Windows.Gets the three-letter code for the language as defined in the Windows API.

TwoLetterISOLanguageName

Obtiene el código de dos letras ISO 639-1 del idioma del objeto CultureInfo actual.Gets the ISO 639-1 two-letter code for the language of the current CultureInfo.

UseUserOverride

Obtiene un valor que indica si el objeto CultureInfo actual usa la configuración de la referencia cultural seleccionada por el usuario.Gets a value indicating whether the current CultureInfo object uses the user-selected culture settings.

Métodos

ClearCachedData()

Actualiza la información relativa a la referencia cultural almacenada en caché.Refreshes cached culture-related information.

Clone()

Crea una copia del objeto CultureInfo actual.Creates a copy of the current CultureInfo.

CreateSpecificCulture(String)

Crea un objeto CultureInfo que representa la referencia cultural específica asociada al nombre especificado.Creates a CultureInfo that represents the specific culture that is associated with the specified name.

Equals(Object)

Determina si el objeto especificado es la misma referencia cultural que el objeto CultureInfo actual.Determines whether the specified object is the same culture as the current CultureInfo.

GetConsoleFallbackUICulture()

Obtiene una referencia cultural de la interfaz de usuario alternativa apta para las aplicaciones de consola cuando la referencia cultural de la interfaz gráfica de usuario predeterminada no es apropiada.Gets an alternate user interface culture suitable for console applications when the default graphic user interface culture is unsuitable.

GetCultureInfo(Int32)

Recupera una instancia almacenada en memoria caché, de solo lectura, de una referencia cultural usando el identificador de referencia cultural especificado.Retrieves a cached, read-only instance of a culture by using the specified culture identifier.

GetCultureInfo(String)

Recupera una instancia almacenada en memoria caché, de solo lectura, de una referencia cultural utilizando el nombre de referencia cultural especificado.Retrieves a cached, read-only instance of a culture using the specified culture name.

GetCultureInfo(String, String)

Recupera una instancia almacenada en memoria caché, de solo lectura, de una referencia cultural.Retrieves a cached, read-only instance of a culture. Los parámetros especifican una referencia cultural que se inicializa con los objetos TextInfo y CompareInfo especificados por otra referencia cultural.Parameters specify a culture that is initialized with the TextInfo and CompareInfo objects specified by another culture.

GetCultureInfoByIetfLanguageTag(String)

Desusado.Deprecated. Recupera un objeto CultureInfo de solo lectura cuyas características lingüísticas se identifican por la etiqueta de idioma RFC 4646 especificada.Retrieves a read-only CultureInfo object having linguistic characteristics that are identified by the specified RFC 4646 language tag.

GetCultures(CultureTypes)

Obtiene la lista de referencias culturales admitidas filtradas por el parámetro CultureTypes especificado.Gets the list of supported cultures filtered by the specified CultureTypes parameter.

GetFormat(Type)

Obtiene un objeto que define cómo se aplica el formato al tipo especificado.Gets an object that defines how to format the specified type.

GetHashCode()

Sirve como función hash para la CultureInfo actual, que se puede usar en algoritmos hash y estructuras de datos, como una tabla hash.Serves as a hash function for the current CultureInfo, suitable for hashing algorithms and data structures, such as a hash table.

GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del objeto Object actual.Creates a shallow copy of the current Object.

(Heredado de Object)
ReadOnly(CultureInfo)

Devuelve un contenedor de solo lectura en torno al objeto CultureInfo especificado.Returns a read-only wrapper around the specified CultureInfo object.

ToString()

Devuelve una cadena que contiene el nombre del elemento CultureInfo actual en el formato languagecode2-country/regioncode2.Returns a string containing the name of the current CultureInfo in the format languagecode2-country/regioncode2.

Se aplica a

Consulte también: