CultureInfo.CurrentUICulture 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 el objeto CultureInfo que representa la referencia cultural de interfaz de usuario actual usada por el Resource Manager para buscar recursos específicos de la referencia cultural en tiempo de ejecución.
public:
static property System::Globalization::CultureInfo ^ CurrentUICulture { System::Globalization::CultureInfo ^ get(); void set(System::Globalization::CultureInfo ^ value); };
public:
static property System::Globalization::CultureInfo ^ CurrentUICulture { System::Globalization::CultureInfo ^ get(); };
public static System.Globalization.CultureInfo CurrentUICulture { get; set; }
public static System.Globalization.CultureInfo CurrentUICulture { get; }
static member CurrentUICulture : System.Globalization.CultureInfo with get, set
static member CurrentUICulture : System.Globalization.CultureInfo
Public Shared Property CurrentUICulture As CultureInfo
Public Shared ReadOnly Property CurrentUICulture As CultureInfo
Valor de propiedad
Referencia cultural usada por el Resource Manager para buscar recursos específicos de la referencia cultural en tiempo de ejecución.
Excepciones
La propiedad se establece en null.
La propiedad se establece en un nombre de referencia cultural que no se puede usar para buscar un archivo de recursos. Los nombres de archivo de recursos solo pueden incluir letras, números, guiones o guiones bajos.
Ejemplos
En el ejemplo de código 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
La propiedad CurrentUICulture es una propiedad individual de cada subproceso. Es decir, cada subproceso tiene su propia referencia cultural actual de la interfaz de usuario. Esta propiedad es equivalente a recuperar o establecer el CultureInfo objeto asignado a la System.Threading.Thread.CurrentThread.CurrentUICulture propiedad . Cuando se inicia un subproceso, la referencia cultural de su interfaz de usuario se determina inicialmente de la siguiente manera:
Al recuperar la cultura especificada por la propiedad DefaultThreadCurrentUICulture 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, la referencia cultural de la interfaz de usuario viene determinada por la referencia cultural de la interfaz de usuario del subproceso que realiza la llamada. En el ejemplo siguiente se cambia la referencia cultural de la interfaz de usuario 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 de la interfaz de usuario. Cada una de las tareas (y los subprocesos) ha heredado la referencia cultural de la interfaz de usuario del subproceso que realiza la llamada.
using System; using System.Collections.Generic; using System.Globalization; using System.Runtime.Versioning; using System.Threading; using System.Threading.Tasks; public class Example { public static async Task Main() { var tasks = new List<Task>(); Console.WriteLine($"The current UI culture is {Thread.CurrentThread.CurrentUICulture.Name}"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("pt-BR"); // Change the current UI culture to Portuguese (Brazil). Console.WriteLine($"Current UI culture changed to {Thread.CurrentThread.CurrentUICulture.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($"UI Culture of task {Task.CurrentId} on thread {Thread.CurrentThread.ManagedThreadId} is {Thread.CurrentThread.CurrentUICulture.Name}"); })); await Task.WhenAll(tasks.ToArray()); } } // The example displays output like the following: // The current UI culture is en-US // Current UI culture changed to pt-BR // Application thread is thread 9 // UI Culture of task 2 on thread 11 is pt-BR // UI Culture of task 1 on thread 10 is pt-BR // UI Culture of task 3 on thread 11 is pt-BR // UI Culture of task 5 on thread 11 is pt-BR // UI Culture of task 6 on thread 11 is pt-BR // UI Culture of task 4 on thread 10 is pt-BRImports System.Globalization Imports System.Threading Module Example1 Public Sub Main() Dim tasks As New List(Of Task) Console.WriteLine("The current UI culture is {0}", Thread.CurrentThread.CurrentUICulture.Name) Thread.CurrentThread.CurrentUICulture = New CultureInfo("pt-BR") ' Change the current UI culture to Portuguese (Brazil). Console.WriteLine("Current UI culture changed to {0}", Thread.CurrentThread.CurrentUICulture.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.CurrentUICulture.Name) End Sub)) Next Task.WaitAll(tasks.ToArray()) End Sub End Module ' The example displays output like the following: ' The current UI culture is en-US ' Current UI 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-BRPara obtener más información, consulte Cultura y operaciones asincrónicas basadas en tareas.
Mediante una llamada a la función de Windows
GetUserDefaultUILanguage.
Para cambiar la cultura de la interfaz de usuario utilizada por un subproceso, establezca la propiedad Thread.CurrentUICulture en la nueva cultura. Si cambia explícitamente la cultura de la interfaz de usuario de un subproceso así, ese cambio persiste si el subproceso cruza los límites del dominio de la aplicación.
Note
Si establece el valor de la propiedad a un CultureInfo objeto que representa una nueva cultura, el valor de la propiedad Thread.CurrentThread.CurrentCulture también cambia.
Obtener la referencia cultural de la interfaz de usuario actual
La CultureInfo.CurrentUICulture propiedad es una configuración por subproceso; es decir, cada subproceso puede tener su propia referencia cultural de interfaz de usuario. Para obtener la referencia cultural de la IU del subproceso actual, recupere el valor de la propiedad CultureInfo.CurrentUICulture, como se muestra en el ejemplo siguiente.
using System;
using System.Globalization;
public class Example2
{
public static void Main()
{
CultureInfo culture = CultureInfo.CurrentUICulture;
Console.WriteLine($"The current UI culture is {culture.NativeName} [{culture.Name}]");
}
}
// The example displays output like the following:
// The current UI culture is English (United States) [en-US]
Imports System.Globalization
Module Example3
Public Sub Main()
Dim culture As CultureInfo = CultureInfo.CurrentUICulture
Console.WriteLine("The current UI culture is {0} [{1}]",
culture.NativeName, culture.Name)
End Sub
End Module
' The example displays output like the following:
' The current UI culture is English (United States) [en-US]
También puede recuperar el valor de la referencia cultural de la interfaz de usuario del subproceso actual desde la propiedad Thread.CurrentUICulture.
Establecer explícitamente la cultura de la interfaz de usuario actual
Puede cambiar la referencia cultural de la interfaz de usuario actual asignando un CultureInfo objeto que representa la nueva referencia cultural a la CultureInfo.CurrentUICulture propiedad . La cultura de la interfaz de usuario actual se puede establecer en una cultura específica (como en-US o de-DE) o en una cultura neutra (como en o de). En el ejemplo siguiente se establece la referencia cultural de la interfaz de usuario actual en fr-FR o Francés (Francia).
using System;
using System.Globalization;
public class Example1
{
public static void Main()
{
Console.WriteLine($"The current UI culture: {CultureInfo.CurrentUICulture.Name}");
CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
Console.WriteLine($"The current UI culture: {CultureInfo.CurrentUICulture.Name}");
}
}
// The example displays output like the following:
// The current UI culture: en-US
// The current UI culture: fr-FR
Imports System.Globalization
Module Example2
Public Sub Main()
Console.WriteLine("The current UI culture: {0}",
CultureInfo.CurrentUICulture.Name)
CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR")
Console.WriteLine("The current UI culture: {0}",
CultureInfo.CurrentUICulture.Name)
End Sub
End Module
' The example displays output like the following:
' The current UI culture: en-US
' The current UI culture: fr-FR
En una aplicación multiproceso, puede establecer explícitamente la referencia cultural de la interfaz de usuario de cualquier subproceso asignando un CultureInfo objeto que represente esa referencia cultural a la propiedad del Thread.CurrentUICulture subproceso. Si el subproceso cuya cultura desea establecer es el subproceso actual, puede asignar la nueva cultura a la propiedad CultureInfo.CurrentUICulture. Cuando la referencia cultural de la interfaz de usuario de un subproceso se establece explícitamente, ese subproceso conserva la misma referencia cultural incluso si cruza los límites del dominio de la aplicación y ejecuta código en otro dominio de aplicación.
Establecer implícitamente la cultura actual de la interfaz de usuario
Cuando se crea un subproceso, incluido el subproceso de aplicación principal, se establece de forma predeterminada su referencia cultural de interfaz de usuario actual como se indica a continuación:
- Mediante el uso de la referencia cultural definida por la propiedad DefaultThreadCurrentUICulture para el dominio de aplicación actual si el valor de la propiedad no es
null. - Mediante el uso de la referencia cultural predeterminada del sistema. En los sistemas que utilizan el sistema operativo Windows, el entorno de ejecución de lenguaje común llama a la función de Windows
GetUserDefaultUILanguagepara establecer la cultura de la interfaz de usuario actual.GetUserDefaultUILanguagedevuelve la referencia cultural de la interfaz de usuario predeterminada establecida por el usuario. Si el usuario no ha establecido un idioma de interfaz de usuario predeterminado, devuelve la configuración regional instalada originalmente en el sistema.
Si el subproceso cruza los límites de la aplicación y ejecuta código en otro dominio de aplicación, su referencia cultural se determina de la misma manera que la de un subproceso recién creado.
Tenga en cuenta que si establece una referencia cultural de interfaz de usuario específica diferente de la referencia cultural de interfaz de usuario instalada por el sistema o la referencia cultural preferida del usuario, la aplicación inicia varios subprocesos, la referencia cultural de la interfaz de usuario actual de esos subprocesos será la referencia cultural devuelta por la GetUserDefaultUILanguage función, a menos que asigne una referencia cultural a la DefaultThreadCurrentUICulture propiedad en el dominio de aplicación en el que se ejecuta el subproceso.
Consideraciones de seguridad
Cambiar la referencia cultural del subproceso actual requiere un permiso SecurityPermission con el valor ControlThread configurado.
Caution
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.