CultureInfo.CurrentUICulture Eigenschap

Definitie

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-BR
    
    Imports 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-BR
    

    Zie Asynchrone bewerkingen op basis van cultuur en taken voor meer informatie.

  • Door de functie Windows GetUserDefaultUILanguage aan 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 GetUserDefaultUILanguage aan om de huidige UI-cultuur in te stellen. GetUserDefaultUILanguage retourneert 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.

Van toepassing op

Zie ook