Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Propiedad CultureInfo.CurrentCulture

 

Publicado: octubre de 2016

Obtiene o establece el objeto CultureInfo que representa la referencia cultural utilizada por el subproceso actual.

Espacio de nombres:   System.Globalization
Ensamblado:  mscorlib (en mscorlib.dll)

public static CultureInfo CurrentCulture { get; set; }

Valor de propiedad

Type: System.Globalization.CultureInfo

El objeto que representa la referencia cultural utilizada por el subproceso actual.

Exception Condition
ArgumentNullException

La propiedad se establece en null.

La CultureInfo objeto devuelto por esta propiedad y sus objetos asociados determinar el formato predeterminado para las fechas, horas, números, valores de moneda, el criterio de ordenación de texto, convenciones las mayúsculas y minúsculas y comparaciones de cadenas.

La referencia cultural actual es una propiedad del subproceso en ejecución, que es devuelto por el método estático Thread.CurrentThread propiedad. El valor de la CultureInfo.CurrentCulture propiedad se corresponde con el valor de la Thread.CurrentCulture propiedad. Recuperación del valor de la CultureInfo.CurrentCulture propiedad es equivalente al recuperar el CultureInfo objeto devuelto por la Thread.CurrentThread.CurrentCulture propiedad. A partir de la .NET Framework 4.6, establezca el valor de la CultureInfo.CurrentCulture también cambia la propiedad de la referencia cultural del subproceso actual.

System_CAPS_noteNota

En .NET Framework 4.5.2 y versiones anteriores, el CurrentCulture propiedad es de solo lectura; es decir, puede recuperar el valor de propiedad, pero no puede establecerlo. Para cambiar la referencia cultural actual, se asigna el CultureInfo objeto que representa la nueva referencia cultural a la Thread.CurrentThread.CurrentCulture propiedad. A partir de la .NET Framework 4.6, el CurrentCulture propiedad es de lectura y escritura; puede establecer y recuperar el valor de la propiedad. Si establece el valor de propiedad en un CultureInfo objeto que representa una nueva referencia cultural, el valor de la Thread.CurrentThread.CurrentCulture propiedad también cambia.

En esta sección:

Cómo se determina la referencia cultural del subproceso
Obtener la referencia cultural actual
Establecer explícitamente la propiedad CurrentCulture
La referencia cultural actual e invalidaciones de usuario
Referencia cultural y las aplicaciones de Windows

Cuando se inicia un subproceso, su referencia cultural se determina inicialmente como sigue:

  • Recuperando la referencia cultural especificada por el DefaultThreadCurrentCulture propiedad en el dominio de aplicación en el que está ejecutando el subproceso, si el valor de propiedad no es null.

  • Si el subproceso es un subproceso del grupo que se está ejecutando una operación asincrónica basada en tareas y la aplicación está dirigida la .NET Framework 4.6 o una versión posterior de .NET Framework, la referencia cultural se determina por la referencia cultural del subproceso que realiza la llamada. En el ejemplo siguiente se cambia la referencia cultural actual para portugués (Brasil) e inicia las seis tareas, cada uno de los cuales muestra su identificador de subproceso, su Id. de tarea y la referencia cultural actual. Cada una de las tareas (y los subprocesos) ha heredado la referencia cultural del subproceso que realiza la llamada.

    using System;
    using System.Collections.Generic;
    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()
       {
          var tasks = new List<Task>();
          Console.WriteLine("The current culture is {0}", 
                            Thread.CurrentThread.CurrentCulture.Name);
          Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR");
          // Change the current culture to Portuguese (Brazil).
          Console.WriteLine("Current culture changed to {0}",
                            Thread.CurrentThread.CurrentCulture.Name);
          Console.WriteLine("Application thread is thread {0}",
                            Thread.CurrentThread.ManagedThreadId);
          // Launch six tasks and display their current culture.
          for (int ctr = 0; ctr <= 5; ctr++)
             tasks.Add(Task.Run( () => {
                                   Console.WriteLine("Culture of task {0} on thread {1} is {2}",
                                                     Task.CurrentId, 
                                                     Thread.CurrentThread.ManagedThreadId,
                                                     Thread.CurrentThread.CurrentCulture.Name);
                                } ));                     
    
          Task.WaitAll(tasks.ToArray());
       }
    }
    // The example displays output like the following:
    //     The current culture is en-US
    //     Current culture changed to pt-BR
    //     Application thread is thread 9
    //     Culture of task 2 on thread 11 is pt-BR
    //     Culture of task 1 on thread 10 is pt-BR
    //     Culture of task 3 on thread 11 is pt-BR
    //     Culture of task 5 on thread 11 is pt-BR
    //     Culture of task 6 on thread 11 is pt-BR
    //     Culture of task 4 on thread 10 is pt-BR
    

    Para obtener más información, vea la sección "Referencia cultural y operaciones asincrónicas basadas en tareas" en el CultureInfo tema.

  • Mediante una llamada a las ventanas GetUserDefaultLocaleName función.

Tenga en cuenta que si establece una referencia cultural específica que es diferente de la referencia cultural del sistema instalado o la referencia cultural preferida del usuario y la aplicación inicia varios subprocesos, la referencia cultural actual de esos subprocesos será la referencia cultural devuelta por la GetUserDefaultLocaleName función, a menos que se asignará una referencia cultural para la DefaultThreadCurrentCulture propiedad en el dominio de aplicación en el que se está ejecutando el subproceso.

Para obtener más información acerca de cómo se determina la referencia cultural de un subproceso, vea la sección "Referencia cultural y subprocesos" en la CultureInfo página de referencia.

El CultureInfo.CurrentCulture propiedad es una configuración de cada subproceso; es decir, cada subproceso puede tener su propia referencia cultural. Obtener la referencia cultural del subproceso actual al recuperar el valor de la CultureInfo.CurrentCulture propiedad, como en el ejemplo siguiente se muestra.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture = CultureInfo.CurrentCulture;
      Console.WriteLine("The current culture is {0} [{1}]",
                        culture.NativeName, culture.Name);
   }
}
// The example displays output like the following:
//       The current culture is English (United States) [en-US]

También puede recuperar el valor de referencia cultural del subproceso actual desde el Thread.CurrentThread propiedad.

Comience por la .NET Framework 4.6, para cambiar la referencia cultural utilizada por un subproceso existente, se establece la CultureInfo.CurrentCulture propiedad a la nueva referencia cultural. Si se modifica explícitamente la referencia cultural de un subproceso de este modo, que cambian continúa si el subproceso cruce los límites del dominio de aplicación. En el ejemplo siguiente se cambia la referencia cultural del subproceso actual en neerlandés (Países Bajos). También muestra que, cuando el subproceso actual está fuera de los límites del dominio de aplicación, la referencia cultural actual sigue siendo modificada.

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

public class Info : MarshalByRefObject
{
   public void ShowCurrentCulture()
   {
      Console.WriteLine("Culture of {0} in application domain {1}: {2}",
                        Thread.CurrentThread.Name,
                        AppDomain.CurrentDomain.FriendlyName,
                        CultureInfo.CurrentCulture.Name);
   }
}

public class Example
{
   public static void Main()
   {
      Info inf = new Info();
      // Set the current culture to Dutch (Netherlands).
      Thread.CurrentThread.Name = "MainThread";
      CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("nl-NL");
      inf.ShowCurrentCulture();

      // Create a new application domain.
       AppDomain ad = AppDomain.CreateDomain("Domain2");
       Info inf2 = (Info) ad.CreateInstanceAndUnwrap(typeof(Info).Assembly.FullName, "Info");
       inf2.ShowCurrentCulture();                       
   }
}
// The example displays the following output:
//       Culture of MainThread in application domain ChangeCulture1.exe: nl-NL
//       Culture of MainThread in application domain Domain2: nl-NL
System_CAPS_noteNota

Cambiar la referencia cultural usando el CultureInfo.CurrentCulture propiedad requiere un SecurityPermission permiso con la ControlThread valor establecido. Manipular subprocesos es peligrosa debido al estado de seguridad asociado a ellos. Por lo tanto, se debe conceder este permiso sólo a código de confianza y únicamente cuando sea necesario. No se puede cambiar la referencia cultural del subproceso en código de confianza parcial.

A partir de la .NET Framework 4, puede cambiar explícitamente la referencia cultural del subproceso actual para una referencia cultural concreta (por ejemplo, francés (Canadá)) o una referencia cultural neutra (por ejemplo, francés). Cuando un CultureInfo objeto representa una referencia cultural neutra, los valores de CultureInfo propiedades como Calendar, CompareInfo, DateTimeFormat, NumberFormat, y TextInfo reflejar la referencia cultural específica que está asociada a la referencia cultural neutra. Por ejemplo, la referencia cultural dominante para la referencia cultural neutra inglés es inglés (Estados Unidos); la referencia cultural dominante para la configuración regional alemana es alemán (Alemania). En el ejemplo siguiente se ilustra la diferencia en el formato cuando se establece la referencia cultural actual para una referencia cultural concreta, francés (Canadá) y una referencia cultural neutra, francés.

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

public class Example
{
   public static void Main()
   {
      double value = 1634.92;
      CultureInfo.CurrentCulture = new CultureInfo("fr-CA");
      Console.WriteLine("Current Culture: {0}", 
                        CultureInfo.CurrentCulture.Name);
      Console.WriteLine("{0:C2}\n", value);

      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr");
      Console.WriteLine("Current Culture: {0}", 
                        CultureInfo.CurrentCulture.Name);
      Console.WriteLine("{0:C2}", value);
   }
}
// The example displays the following output:
//       Current Culture: fr-CA
//       1 634,92 $
//       
//       Current Culture: fr
//       1 634,92 €

También puede usar el CultureInfo.CurrentCulture propiedad junto con la HttpRequest.UserLanguages propiedad para establecer el CurrentCulture propiedad de una aplicación ASP.NET para el usuario preferido de referencia cultural, como se muestra en el ejemplo siguiente.

CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);

Windows permite a los usuarios reemplazar los valores de propiedad estándar de la CultureInfo objeto y sus objetos asociados mediante el uso de Configuración Regional e idioma en el Panel de Control. El CultureInfo objeto devuelto por la CurrentCulture propiedad refleja estos usuario invalidaciones en los casos siguientes:

  • Si la referencia cultural del subproceso actual se establece implícitamente por las ventanas GetUserDefaultLocaleName función.

  • Si la referencia cultural del subproceso actual definida por el DefaultThreadCurrentCulture propiedad se corresponde con la referencia cultural del sistema de Windows actual.

  • Si la referencia cultural del subproceso actual se establece explícitamente en una referencia cultural devuelta por la CreateSpecificCulture método y que la referencia cultural se corresponde con la referencia cultural del sistema de Windows actual.

  • Si la referencia cultural del subproceso actual se establece explícitamente en una referencia cultural que se crea una instancia de la CultureInfo(String) constructor y que la referencia cultural se corresponde con la referencia cultural del sistema de Windows actual.

En algunos casos, especialmente para las aplicaciones de servidor, al establecer la referencia cultural actual un CultureInfo objeto que refleja las invalidaciones de usuario puede no ser deseable. En su lugar, puede establecer la referencia cultural del subproceso actual en un CultureInfo objeto que no refleje el usuario las invalidaciones de las maneras siguientes:

En aplicaciones de Windows, la CurrentCulture propiedad es de solo lectura. Puede establecer la referencia cultural actual mediante el uso de las ventanas ResourceContext.Languages propiedad. En el ejemplo siguiente se usa para cambiar la referencia cultural actual de la aplicación a inglés (Estados Unidos) o, si la referencia cultural actual ya es el inglés (Estados Unidos), francés (Francia). El valor de la CurrentCulture y CurrentUICulture propiedades se muestran a continuación un TextBlock control denominado block. Como se muestra en el resultado del ejemplo, la referencia cultural actual cambia cuando el ResourceContext.Languages cambios de propiedad.


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

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


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

En el ejemplo de código siguiente se muestra cómo cambiar la CurrentCulture y CurrentUICulture del subproceso actual.

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

public class Example
{
   public static void Main()  
   {
      // Display the name of the current thread culture.
      Console.WriteLine("CurrentCulture is {0}.", CultureInfo.CurrentCulture.Name);

      // Change the current culture to th-TH.
      CultureInfo.CurrentCulture = new CultureInfo("th-TH", false);
      Console.WriteLine("CurrentCulture is now {0}.", CultureInfo.CurrentCulture.Name);

      // Display the name of the current UI culture.
      Console.WriteLine("CurrentUICulture is {0}.", CultureInfo.CurrentUICulture.Name);

      // Change the current UI culture to ja-JP.
      CultureInfo.CurrentUICulture = new CultureInfo( "ja-JP", false );
      Console.WriteLine("CurrentUICulture is now {0}.", CultureInfo.CurrentUICulture.Name);
   }
}
// The example displays the following output:
//       CurrentCulture is en-US.
//       CurrentCulture is now th-TH.
//       CurrentUICulture is en-US.
//       CurrentUICulture is now ja-JP.

SecurityPermission

for setting the current culture. Associated enumeration: F:System.Security.Permissions.SecurityPermissionFlag.ControlThread

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: