CultureInfo.CurrentUICulture Eigenschap
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee haalt u het CultureInfo-object op dat de huidige cultuur van de gebruikersinterface vertegenwoordigt die door de Resource Manager wordt gebruikt om cultuurspecifieke resources tijdens runtime op te zoeken.
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
Waarde van eigenschap
De cultuur die door de Resource Manager wordt gebruikt om cultuurspecifieke resources tijdens runtime op te zoeken.
Uitzonderingen
De eigenschap is ingesteld op null.
De eigenschap is ingesteld op een cultuurnaam die niet kan worden gebruikt om een resourcebestand te vinden. Resourcebestandsnamen kunnen alleen letters, cijfers, afbreekstreepjes of onderstrepingstekens bevatten.
Voorbeelden
In het volgende codevoorbeeld ziet u hoe u de CurrentCulture ene CurrentUICulture thread wijzigt.
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.
Opmerkingen
De eigenschap CurrentUICulture is een eigenschap per thread. Dat wil zeggen dat elke thread een eigen huidige UI-cultuur heeft. Deze eigenschap is gelijk aan het ophalen of instellen van het CultureInfo-object dat is toegewezen aan de eigenschap System.Threading.Thread.CurrentThread.CurrentUICulture. Wanneer een thread wordt gestart, wordt de UI-cultuur in eerste instantie als volgt bepaald:
Door de cultuur op te halen die is opgegeven door de eigenschap DefaultThreadCurrentUICulture in het toepassingsdomein waarin de thread wordt uitgevoerd, als de eigenschapswaarde niet
nullis.Als de thread een thread-pool-thread is die een asynchrone bewerking op basis van een taak uitvoert, wordt de UI-cultuur bepaald door de UI-cultuur van de aanroepende thread. In het volgende voorbeeld wordt de huidige UI-cultuur gewijzigd in Portugees (Brazilië) en worden zes taken gestart, die elk de thread-id, de taak-id en de huidige UI-cultuur weergeven. Elke taak (en iedere thread) heeft de gebruikersinterfacecultuur van de aanroepende thread overgenomen.
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-BRZie Asynchrone bewerkingen op basis van cultuur en taken voor meer informatie.
Door de functie Windows
GetUserDefaultUILanguageaan te roepen.
Als u de cultuur van de gebruikersinterface wilt wijzigen die door een thread wordt gebruikt, stelt u de eigenschap Thread.CurrentUICulture in op de nieuwe cultuur. Als u op deze manier de UI-cultuur van een thread expliciet wijzigt, blijft die wijziging behouden als de thread de grenzen van het toepassingsdomein overschrijdt.
Opmerking
Als u de eigenschapswaarde instelt op een CultureInfo object dat een nieuwe cultuur vertegenwoordigt, wordt de waarde van de eigenschap Thread.CurrentThread.CurrentCulture ook gewijzigd.
De huidige UI-cultuur ophalen
De eigenschap CultureInfo.CurrentUICulture is een instelling per thread; Dat wil zeggen dat elke thread een eigen UI-cultuur kan hebben. U krijgt de cultuur van de gebruikersinterface van de huidige thread door de waarde van de eigenschap CultureInfo.CurrentUICulture op te halen, zoals in het volgende voorbeeld wordt geïllustreerd.
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]
U kunt ook de waarde van de UI-cultuur van de huidige thread ophalen uit de eigenschap Thread.CurrentUICulture.
De huidige UI-cultuur expliciet instellen
U kunt de huidige UI-cultuur wijzigen door een CultureInfo object toe te wijzen dat de nieuwe cultuur aan de CultureInfo.CurrentUICulture eigenschap vertegenwoordigt. De huidige UI-cultuur kan worden ingesteld op een specifieke cultuur (zoals en-US of de-DE) of op een neutrale cultuur (zoals en of de). In het volgende voorbeeld wordt de huidige UI-cultuur ingesteld op fr-FR of Frans (Frankrijk).
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
In een multithreaded-toepassing kunt u de UI-cultuur van elke thread expliciet instellen door een CultureInfo-object toe te wijzen dat deze cultuur vertegenwoordigt aan de eigenschap Thread.CurrentUICulture van de thread. Als de thread waarvan de cultuur die u wilt instellen de huidige thread is, kunt u de nieuwe cultuur toewijzen aan de eigenschap CultureInfo.CurrentUICulture. Wanneer de UI-cultuur van een thread expliciet is ingesteld, behoudt die thread dezelfde cultuur, zelfs als deze de grenzen van het toepassingsdomein overschrijdt en code uitvoert in een ander toepassingsdomein.
Impliciet de huidige UI-cultuur instellen
Wanneer een thread, inclusief de hoofd-toepassingsthread, voor het eerst wordt gemaakt, wordt de huidige UI-cultuur standaard als volgt ingesteld:
- Door de cultuur te gebruiken die is gedefinieerd door de eigenschap DefaultThreadCurrentUICulture voor het huidige toepassingsdomein als de eigenschapswaarde niet
nullis. - Door de standaardcultuur van het systeem te gebruiken. Op systemen die het Windows-besturingssysteem gebruiken, roept de algemene taalruntime de Functie Windows
GetUserDefaultUILanguageaan om de huidige UI-cultuur in te stellen.GetUserDefaultUILanguageretourneert de standaard-UI-cultuur die door de gebruiker is ingesteld. Als de gebruiker geen standaardtaal voor de gebruikersinterface heeft ingesteld, wordt de cultuur geretourneerd die oorspronkelijk op het systeem is geïnstalleerd.
Als de thread toepassingsgrenzen overschrijdt en code uitvoert in een ander toepassingsdomein, wordt de cultuur ervan op dezelfde manier bepaald als die van een nieuw gemaakte thread.
Houd er rekening mee dat als u een specifieke UI-cultuur instelt die verschilt van de door het systeem geïnstalleerde UI-cultuur of de voorkeurscultuur van de gebruiker en uw toepassing meerdere threads start, de huidige UI-cultuur van deze threads de cultuur is die wordt geretourneerd door de GetUserDefaultUILanguage-functie, tenzij u een cultuur toewijst aan de eigenschap DefaultThreadCurrentUICulture in het toepassingsdomein waarin de thread wordt uitgevoerd.
Beveiligingsoverwegingen
Voor het wijzigen van de cultuur van de huidige thread is een SecurityPermission machtiging met de ControlThread waardeset vereist.
Caution
Het bewerken van threads is gevaarlijk vanwege de beveiligingsstatus die is gekoppeld aan threads. Daarom moet deze machtiging alleen worden verleend aan betrouwbare code en vervolgens alleen indien nodig. U kunt de threadcultuur niet wijzigen in semi-vertrouwde code.