Comparteix a través de


CultureInfo.DefaultThreadCurrentUICulture Propiedad

Definición

Obtiene o establece la referencia cultural predeterminada de la interfaz de usuario para los subprocesos del dominio de aplicación actual.

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

Valor de propiedad

Referencia cultural de la interfaz de usuario predeterminada para los subprocesos del dominio de aplicación actual, o null si la referencia cultural de la interfaz de usuario actual del sistema es la referencia cultural de la interfaz de usuario predeterminada del subproceso en el dominio de aplicación.

Excepciones

En una operación de conjunto, el valor de la propiedad Name no es válido.

Ejemplos

En el ejemplo siguiente se muestra el comportamiento predeterminado de .NET Framework en la definición de la referencia cultural actual de un nuevo subproceso. Usa recursos de inglés y ruso. El siguiente archivo de texto denominado GreetingStrings.txt contiene los recursos de idioma inglés:

greeting =Hello again!
newGreeting=Hello!

Se compila en un archivo .resources binario denominado GreetingStrings.resources mediante el Generador de archivos de recursos con el siguiente comando.

resgen greetingstrings.txt

El siguiente archivo de texto denominado GreetingStrings.ru-RU.txt contiene los recursos de idioma ruso:

greeting=Еще раз привет!
newGreeting=Привет!

Se compila en un archivo .resources binario denominado GreetingStrings.ru-RU.resources mediante el generador de archivos de recursos con el siguiente comando.

resgen greetingstrings.ru-RU.txt

El código de aplicación, que se muestra a continuación, reside en un archivo denominado Example1.vb o Example1.cs. Se compila en un archivo ejecutable mediante el siguiente comando para el compilador de Visual Basic:

vbc Example1.vb /resource:GreetingStrings.resources

Para el compilador de C#, el comando es similar:

csc /resource:GreetingStrings.resources Example1.cs

Esto crea un ensamblado que incluye el código ejecutable del ejemplo junto con los recursos de su referencia cultural de reserva. También puede usar Assembly Linker para crear el archivo de recursos para la referencia cultural rusa (Rusia) con el siguiente comando:

>al /embed:greetingstrings.ru-RU.resources /c:ru-RU /template:example1.exe /out:ru-RU\Example1.resources.dll

En el inicio, en el ejemplo se establece la referencia cultural actual y la referencia cultural actual de la interfaz de usuario en ruso (Rusia) en todos los sistemas, excepto aquellos en los que la referencia cultural predeterminada del sistema ya es rusa (Rusia). Si la referencia cultural predeterminada del sistema ya es rusa (Rusia), el código establece la referencia cultural actual y la referencia cultural actual de la interfaz de usuario en inglés (Estados Unidos). A continuación, llama a la ShowGreeting rutina, que muestra una cadena simple la primera vez que se llama y una cadena ligeramente diferente en las llamadas a métodos posteriores. A continuación, crea un nuevo subproceso, que también ejecuta la ShowGreeting rutina.

using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Threading;

[assembly:NeutralResourcesLanguageAttribute("en-US")]

public class Example
{
   private static int nGreetings = 0;
   private static ResourceManager rm;

   public static void Main()
   {
      AppDomain domain = AppDomain.CurrentDomain;
      rm = new ResourceManager("GreetingStrings",
                               typeof(Example).Assembly);

      CultureInfo culture = null;
      if (Thread.CurrentThread.CurrentUICulture.Name == "ru-RU")
         culture = CultureInfo.CreateSpecificCulture("en-US");
      else
         culture = CultureInfo.CreateSpecificCulture("ru-RU");

      Thread.CurrentThread.CurrentCulture = culture;
      Thread.CurrentThread.CurrentUICulture = culture;

      ShowGreeting();
      Thread.Sleep(1000);

      Thread workerThread = new Thread(Example.ShowGreeting);
      workerThread.Start();
   }

   private static void ShowGreeting()
   {
      string greeting = nGreetings == 0 ? rm.GetString("newGreeting") :
                                          rm.GetString("greeting");
      nGreetings++;
      Console.WriteLine("{0}", greeting);
   }
}
// The example displays the following output:
//       Привет!
//       Hello again!
Imports System.Globalization
Imports System.Reflection
Imports System.Resources
Imports System.Threading

<Assembly:NeutralResourcesLanguageAttribute("en-US")>

Public Class Example
   Private Shared nGreetings As Integer = 0
   Private Shared rm As ResourceManager

   Public Shared Sub Main()
      Dim domain As AppDomain = AppDomain.CurrentDomain
      rm = New ResourceManager("GreetingStrings", 
                               GetType(Example).Assembly)
                  
      Dim culture As CultureInfo = Nothing
      If Thread.CurrentThread.CurrentUICulture.Name = "ru-RU" Then
         culture = CultureInfo.CreateSpecificCulture("en-US")
      Else
         culture = CultureInfo.CreateSpecificCulture("ru-RU")
      End If   
      Thread.CurrentThread.CurrentCulture = culture
      Thread.CurrentThread.CurrentUICulture = culture

      ShowGreeting()
      Thread.Sleep(1000)

      Dim workerThread As New Thread(AddressOf Example.ShowGreeting)
      workerThread.Start()
   End Sub
   
   Private Shared Sub ShowGreeting()
      Dim greeting As String = CStr(IIf(nGreetings = 0, 
                                        rm.GetString("newGreeting"),
                                        rm.GetString("greeting")))
      nGreetings += 1
      Console.WriteLine("{0}", greeting)   
   End Sub
End Class
' The example displays the following output:
'       Привет!
'       Hello again!

Como se muestra en la salida del ejemplo, cuando se ejecuta el ejemplo en un equipo cuya referencia cultural del sistema es inglés (Estados Unidos), el subproceso principal muestra su cadena inicial en ruso. Sin embargo, dado que la referencia cultural del subproceso de trabajo se deriva de la referencia cultural actual del sistema Windows en lugar de la referencia cultural actual de la aplicación, el subproceso de trabajo muestra su cadena en inglés.

En el ejemplo siguiente se usan las DefaultThreadCurrentCulture propiedades y DefaultThreadCurrentUICulture para definir la referencia cultural actual y la referencia cultural de la interfaz de usuario actual de un nuevo subproceso de aplicación.

En el ejemplo se usan los mismos archivos de recursos que el ejemplo anterior. Los comandos para compilar e insertar los recursos de idioma ruso localizados en un ensamblado satélite también son idénticos, excepto que el nombre del ensamblado ejecutable cambia.

En el inicio, en el ejemplo se establece la referencia cultural actual y la referencia cultural actual de la interfaz de usuario en ruso (Rusia) en todos los sistemas, excepto aquellos en los que la referencia cultural predeterminada del sistema ya es rusa (Rusia). Si la referencia cultural predeterminada del sistema ya es rusa (Rusia), establece la referencia cultural actual y la referencia cultural de la interfaz de usuario actual en inglés (Estados Unidos). A continuación, llama a la ShowGreeting rutina, que muestra una cadena simple la primera vez que se llama y una cadena ligeramente diferente en las llamadas a métodos posteriores. A continuación, crea un nuevo subproceso, que también ejecuta la ShowGreeting rutina.

using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Threading;

[assembly:NeutralResourcesLanguageAttribute("en-US")]

public class Example
{
   private static int nGreetings = 0;
   private static ResourceManager rm;

   public static void Main()
   {
      AppDomain domain = AppDomain.CurrentDomain;
      rm = new ResourceManager("GreetingStrings",
                               typeof(Example).Assembly);

      CultureInfo culture = null;
      if (Thread.CurrentThread.CurrentUICulture.Name == "ru-RU")
         culture = CultureInfo.CreateSpecificCulture("en-US");
      else
         culture = CultureInfo.CreateSpecificCulture("ru-RU");

      CultureInfo.DefaultThreadCurrentCulture = culture;
      CultureInfo.DefaultThreadCurrentUICulture = culture;

      Thread.CurrentThread.CurrentCulture = culture;
      Thread.CurrentThread.CurrentUICulture = culture;

      ShowGreeting();
      Thread.Sleep(1000);

      Thread workerThread = new Thread(Example.ShowGreeting);
      workerThread.Start();
   }

   private static void ShowGreeting()
   {
      string greeting = nGreetings == 0 ? rm.GetString("newGreeting") :
                                          rm.GetString("greeting");
      nGreetings++;
      Console.WriteLine("{0}", greeting);
   }
}
// The example displays the following output:
//       Привет!
//       Еще раз привет!
Imports System.Globalization
Imports System.Reflection
Imports System.Resources
Imports System.Threading

<Assembly:NeutralResourcesLanguageAttribute("en-US")>

Public Class Example
   Private Shared nGreetings As Integer = 0
   Private Shared rm As ResourceManager

   Public Shared Sub Main()
      Dim domain As AppDomain = AppDomain.CurrentDomain
      rm = New ResourceManager("GreetingStrings", 
                               GetType(Example).Assembly)
                  
      Dim culture As CultureInfo = Nothing
      If Thread.CurrentThread.CurrentUICulture.Name = "ru-RU" Then
         culture = CultureInfo.CreateSpecificCulture("en-US")
      Else
         culture = CultureInfo.CreateSpecificCulture("ru-RU")
      End If   
      CultureInfo.DefaultThreadCurrentCulture = culture
      CultureInfo.DefaultThreadCurrentUICulture = culture
       
      Thread.CurrentThread.CurrentCulture = culture
      Thread.CurrentThread.CurrentUICulture = culture

      ShowGreeting()
      Thread.Sleep(1000)

      Dim workerThread As New Thread(AddressOf Example.ShowGreeting)
      workerThread.Start()
   End Sub
   
   Private Shared Sub ShowGreeting()
      Dim greeting As String = CStr(IIf(nGreetings = 0, 
                                        rm.GetString("newGreeting"),
                                        rm.GetString("greeting")))
      nGreetings += 1
      Console.WriteLine("{0}", greeting)   
   End Sub
End Class
' The example displays the following output:
'       Привет!
'       Еще раз привет!

Como se muestra en la salida del ejemplo, cuando se ejecuta el ejemplo en un equipo cuya referencia cultural del sistema es inglés (Estados Unidos), tanto el subproceso principal como el subproceso de trabajo muestran sus cadenas en el idioma ruso.

Comentarios

En .NET Framework 4 y versiones anteriores, de forma predeterminada, la referencia cultural de la interfaz de usuario de todos los subprocesos se establece en la referencia cultural del sistema de Windows. En el caso de las aplicaciones cuya referencia cultural de interfaz de usuario actual difiere de la referencia cultural predeterminada del sistema, este comportamiento a menudo no es deseable. En .NET Framework 4.5, la DefaultThreadCurrentUICulture propiedad permite definir la referencia cultural de interfaz de usuario predeterminada de todos los subprocesos de un dominio de aplicación.

Importante

Si no ha establecido explícitamente la referencia cultural de la interfaz de usuario de los subprocesos existentes que se ejecutan en un dominio de aplicación, el establecimiento de la DefaultThreadCurrentUICulture propiedad también cambia la referencia cultural de estos subprocesos. Sin embargo, si estos subprocesos se ejecutan en otro dominio de aplicación, su referencia cultural se define mediante la DefaultThreadCurrentUICulture propiedad de ese dominio de aplicación o, si no se define ningún valor predeterminado, mediante la referencia cultural del sistema predeterminada. Por este motivo, se recomienda establecer siempre explícitamente la referencia cultural del subproceso de aplicación principal y no confiar en la DefaultThreadCurrentUICulture propiedad para definir la referencia cultural del subproceso de aplicación principal.

A menos que se establezca explícitamente, el valor de la DefaultThreadCurrentUICulture propiedad es nully la referencia cultural actual de todos los subprocesos de un dominio de aplicación a los que no se ha asignado una referencia cultural explícita se define mediante la referencia cultural predeterminada del sistema de Windows.

Para obtener más información sobre las referencias culturales, los subprocesos y los dominios de aplicación, consulte las secciones "Referencia cultural y subprocesos" y "Referencia cultural y dominios de aplicación" en la página de CultureInfo referencia.

Se aplica a

Consulte también