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; }
member this.DefaultThreadCurrentUICulture : System.Globalization.CultureInfo with get, set
Public Shared Property DefaultThreadCurrentUICulture As CultureInfo

Valor de propiedad

CultureInfo

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 del .NET Framework definición de la referencia cultural actual de un nuevo subproceso. Usa recursos en inglés y ruso. El siguiente archivo de texto denominado GreetingStrings.txt contiene los recursos en inglés:

greeting =Hello again!
newGreeting=Hello!

Se compila en un archivo binario .resources 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 binario .resources 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 ejecutable mediante el comando siguiente para el Visual Basic compilación:

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 ruso (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, el ejemplo establece la referencia cultural actual y la referencia cultural de la interfaz de usuario actual en ruso (Rusia) en todos los sistemas, excepto en aquellos en los que la referencia cultural predeterminada del sistema ya sea ruso (Rusia). Si la referencia cultural predeterminada del sistema ya es ruso (Rusia), el código 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 rutina , que muestra una cadena simple la primera vez que se llama y una cadena ligeramente ShowGreeting diferente en las llamadas de método 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 el ejemplo se ejecuta 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 del sistema Windows actual 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 propiedades y para definir la referencia cultural actual y la referencia cultural de la interfaz de DefaultThreadCurrentCulture usuario actual de un nuevo subproceso de DefaultThreadCurrentUICulture aplicación.

En el ejemplo se usan los mismos archivos de recursos que en 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, salvo que cambia el nombre del ensamblado ejecutable.

En el inicio, el ejemplo establece la referencia cultural actual y la referencia cultural de la interfaz de usuario actual en ruso (Rusia) en todos los sistemas, excepto en aquellos en los que la referencia cultural predeterminada del sistema ya sea ruso (Rusia). Si la referencia cultural predeterminada del sistema ya es ruso (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 rutina , que muestra una cadena simple la primera vez que se llama y una cadena ligeramente ShowGreeting diferente en las llamadas de método 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 el ejemplo se ejecuta 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 idioma ruso.

Comentarios

En la .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 Windows del sistema. En el caso de las aplicaciones cuya referencia cultural de interfaz de usuario actual difiere de la referencia cultural predeterminada del sistema, este comportamiento suele no ser deseable. En la .NET Framework 4.5, la propiedad permite definir la referencia cultural de interfaz de usuario predeterminada de todos los DefaultThreadCurrentUICulture 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, al establecer la propiedad también se cambia la referencia DefaultThreadCurrentUICulture cultural de estos subprocesos. Sin embargo, si estos subprocesos se ejecutan en otro dominio de aplicación, su referencia cultural se define mediante la propiedad de ese dominio de aplicación o, si no se define ningún valor predeterminado, por la referencia cultural predeterminada DefaultThreadCurrentUICulture del sistema. Por este motivo, se recomienda establecer siempre explícitamente la referencia cultural del subproceso de aplicación principal y no confiar en la propiedad para definir la referencia cultural del subproceso DefaultThreadCurrentUICulture de aplicación principal.

A menos que se establezca explícitamente, el valor de la propiedad es y 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 Windows del DefaultThreadCurrentUICulture null sistema.

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

Se aplica a

Consulte también