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; }
member this.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 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.