CultureInfo.DefaultThreadCurrentUICulture Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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 null
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 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.