CultureInfo.CurrentCulture Propiedad

Definición

Obtiene o establece el CultureInfo objeto que representa la referencia cultural utilizada por el subproceso actual y las operaciones asincrónicas basadas en tareas.

public:
 static property System::Globalization::CultureInfo ^ CurrentCulture { System::Globalization::CultureInfo ^ get(); void set(System::Globalization::CultureInfo ^ value); };
public:
 static property System::Globalization::CultureInfo ^ CurrentCulture { System::Globalization::CultureInfo ^ get(); };
public static System.Globalization.CultureInfo CurrentCulture { get; set; }
public static System.Globalization.CultureInfo CurrentCulture { get; }
static member CurrentCulture : System.Globalization.CultureInfo with get, set
static member CurrentCulture : System.Globalization.CultureInfo
Public Shared Property CurrentCulture As CultureInfo
Public Shared ReadOnly Property CurrentCulture As CultureInfo

Valor de propiedad

Referencia cultural usada por el subproceso actual y las operaciones asincrónicas basadas en tareas.

Excepciones

La propiedad se establece en null.

Ejemplos

En el ejemplo siguiente se muestra cómo cambiar y CurrentCultureCurrentUICulture del subproceso actual.

using System;
using System.Globalization;

public class Example0
{
   public static void Main()
   {
      // Display the name of the current 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.
Imports System.Globalization
Imports System.Threading

Public Module Example2
   Public Sub Run()
      ' Display the name of the current 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)
   End Sub
End Module
' The example displays the following output:
'       CurrentCulture is en-US.
'       CurrentCulture is now th-TH.
'       CurrentUICulture is en-US.
'       CurrentUICulture is now ja-JP.

Comentarios

El objeto CultureInfo devuelto por la propiedad CurrentCulture y sus objetos asociados determina el formato predeterminado para las fechas, horas, números y valores monetarios, el orden de clasificación de texto, las convenciones de mayúsculas y minúsculas y las comparaciones de cadenas.

La referencia cultural actual es una propiedad del subproceso en ejecución. Al establecer esta propiedad en un CultureInfo objeto que representa una nueva referencia cultural, el valor de la Thread.CurrentThread.CurrentCulture propiedad también cambia. Sin embargo, se recomienda usar siempre la propiedad CultureInfo.CurrentCulture para recuperar y establecer la referencia cultural actual.

El CultureInfo objeto que devuelve esta propiedad es de solo lectura. Esto significa que no se puede mutar el objeto existente, por ejemplo, cambiando .DateTimeFormat Para cambiar el formato de fecha y hora o algún otro aspecto de la referencia cultural actual, cree un nuevo objeto CultureInfo y asígnelo a la propiedad.

Cómo se determina la referencia cultural de un subproceso

Cuando se inicia un subproceso, su referencia cultural se determina inicialmente de la siguiente manera:

  • Al recuperar la cultura especificada por la propiedad DefaultThreadCurrentCulture en el dominio de aplicación en el que se está ejecutando el subproceso, si el valor de la propiedad no es null.

  • Si el subproceso es un subproceso de grupo de subprocesos que ejecuta una operación asincrónica basada en tareas, su referencia cultural viene determinada por la referencia cultural del subproceso que realiza la llamada. En el ejemplo siguiente se cambia la referencia cultural actual a Portugués (Brasil) y se inician seis tareas, cada una de las cuales muestra su identificador de subproceso, su identificador de tarea y su 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.Threading;
    using System.Threading.Tasks;
    
    public class Example14
    {
        public static async Task Main()
        {
            var tasks = new List<Task>();
            Console.WriteLine($"The current culture is {Thread.CurrentThread.CurrentCulture.Name}");
            Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR");
            // Change the current culture to Portuguese (Brazil).
            Console.WriteLine($"Current culture changed to {Thread.CurrentThread.CurrentCulture.Name}");
            Console.WriteLine($"Application thread is thread {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 {Task.CurrentId} on thread {Thread.CurrentThread.ManagedThreadId} is {Thread.CurrentThread.CurrentCulture.Name}");
                }));
    
            await Task.WhenAll(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
    
    Imports System.Globalization
    Imports System.Threading
    
    Module Example1
        Public Sub S1()
            Dim tasks As New List(Of 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 ctr As Integer = 0 To 5
                tasks.Add(Task.Run(Sub()
                                       Console.WriteLine("Culture of task {0} on thread {1} is {2}",
                                                     Task.CurrentId,
                                                     Thread.CurrentThread.ManagedThreadId,
                                                     Thread.CurrentThread.CurrentCulture.Name)
                                   End Sub))
            Next
            Task.WaitAll(tasks.ToArray())
        End Sub
    End Module
    ' 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, consulte Cultura y operaciones asincrónicas basadas en tareas.

  • Al llamar a la función GetUserDefaultLocaleName en Windows o a la función uloc_getDefault desde ICU, que actualmente llama a la función POSIX setlocale con categoría LC_MESSAGESen sistemas similares a Unix.

Tenga en cuenta que si establece una referencia cultural específica diferente de la referencia cultural instalada por el sistema 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 asigne una referencia cultural a la DefaultThreadCurrentCulture propiedad en el dominio de aplicación en el que se ejecuta el subproceso.

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

Obtén la cultura actual

La CultureInfo.CurrentCulture propiedad es una configuración por subproceso; es decir, cada subproceso puede tener su propia referencia cultural. Para obtener la referencia cultural del subproceso actual, recupere el valor de la propiedad CultureInfo.CurrentCulture, como se muestra en el ejemplo siguiente.

using System;
using System.Globalization;

public class Example5
{
   public static void Main()
   {
      CultureInfo culture = CultureInfo.CurrentCulture;
      Console.WriteLine($"The current culture is {culture.NativeName} [{culture.Name}]");
   }
}

// The example displays output like the following:
//       The current culture is English (United States) [en-US]
Imports System.Globalization

Module Example3
    Public Sub S1()
        Dim culture As CultureInfo = CultureInfo.CurrentCulture
        Console.WriteLine("The current culture is {0} [{1}]",
                        culture.NativeName, culture.Name)
    End Sub
End Module
' The example displays output like the following:
'     The current culture is English (United States) [en-US]

Establecer explícitamente la propiedad CurrentCulture

Para cambiar la configuración regional que usa un subproceso existente, establezca la propiedad CultureInfo.CurrentCulture en la nueva configuración regional. En el siguiente ejemplo, se cambia la cultura del hilo actual a neerlandés (Países Bajos).

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

public class Info11 : MarshalByRefObject
{
    public void ShowCurrentCulture()
    {
        Console.WriteLine($"Culture of thread {Thread.CurrentThread.Name}: {CultureInfo.CurrentCulture.Name}");
    }
}

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

// The example displays the following output:
//
//     Culture of thread MainThread: nl-NL

Note

Cambiar la cultura mediante la propiedad CultureInfo.CurrentCulture requiere un permiso SecurityPermission con el valor ControlThread establecido. La manipulación de subprocesos es peligrosa debido al estado de seguridad asociado a los subprocesos. Por lo tanto, este permiso solo se debe conceder al código de confianza y solo cuando sea necesario. No se puede cambiar la cultura del subproceso en código de confianza parcial.

Puede cambiar explícitamente la referencia cultural del subproceso actual a una referencia cultural específica (como francés (Canadá)) o a una referencia cultural neutra (como francés). Cuando un CultureInfo objeto representa una referencia cultural neutra, los valores de CultureInfo propiedades como Calendar, CompareInfo, DateTimeFormat, NumberFormaty TextInfo reflejan la referencia cultural específica asociada a la referencia cultural neutra. Por ejemplo, la cultura dominante para la cultura neutral inglesa es inglés (Estados Unidos); la cultura dominante para la cultura alemana es alemán (Alemania). En el siguiente ejemplo se ilustra la diferencia en el formato cuando la referencia cultural actual se establece en una específica, francés (Canadá) y una neutra, francés.

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

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

      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr");
      Console.WriteLine($"Current Culture: {CultureInfo.CurrentCulture.Name}");
      Console.WriteLine($"{value:C2}");
   }
}

// The example displays the following output:
//       Current Culture: fr-CA
//       1 634,92 $
//
//       Current Culture: fr
//       1 634,92 €
Imports System.Globalization
Imports System.Threading

Module Example4
    Public Sub S1()
        Dim value As Double = 1634.92
        CultureInfo.CurrentCulture = New CultureInfo("fr-CA")
        Console.WriteLine("Current Culture: {0}",
                        CultureInfo.CurrentCulture.Name)
        Console.WriteLine("{0:C2}", value)
        Console.WriteLine()

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

La configuración cultural actual y las configuraciones personalizadas del usuario

Windows permite a los usuarios invalidar los valores de propiedad estándar del CultureInfo objeto y sus objetos asociados mediante opciones regionales y de idioma en el Panel de control. El objeto CultureInfo devuelto por la propiedad CurrentCulture refleja estas sobrescrituras de usuario en los casos siguientes:

  • Si la cultura del subproceso actual se establece implícitamente mediante la función GetUserDefaultLocaleName de Windows.
  • Si la cultura del hilo actual definida por la propiedad DefaultThreadCurrentCulture corresponde a la cultura actual del sistema de Windows.
  • Si la referencia cultural del subproceso actual se establece explícitamente en una referencia cultural devuelta por el método CreateSpecificCulture y esa referencia cultural corresponde a la referencia cultural del sistema de Windows actual.
  • Si la referencia cultural de subprocesos actual se establece explícitamente en una referencia cultural de la que se crea una instancia CultureInfo(String) y esa referencia cultural corresponde a la referencia cultural actual del sistema Windows.

En algunos casos, especialmente para las aplicaciones de servidor, establecer la configuración regional actual en un objeto CultureInfo que refleje las configuraciones personalizadas de usuario puede no ser deseable. En su lugar, puede establecer la referencia cultural actual en un objeto CultureInfo que no refleje los ajustes del usuario de las siguientes maneras:

Se aplica a

Consulte también