CultureInfo.CurrentUICulture Egenskap

Definition

Hämtar eller anger objektet CultureInfo som representerar den aktuella användargränssnittskulturen som används av Resource Manager för att leta upp kulturspecifika resurser vid körning.

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

Egenskapsvärde

Den kultur som används av Resource Manager för att leta upp kulturspecifika resurser vid körning.

Undantag

Egenskapen är inställd på null.

Egenskapen är inställd på ett kulturnamn som inte kan användas för att hitta en resursfil. Resursfilnamn kan bara innehålla bokstäver, siffror, bindestreck eller understreck.

Exempel

Följande kodexempel visar hur du ändrar CurrentCulture och CurrentUICulture för den aktuella tråden.

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.

Kommentarer

Egenskapen CurrentUICulture är en per tråd-egenskap. Det vill: varje tråd har sin egen aktuella användargränssnittskultur. Den här egenskapen motsvarar hämtning eller inställning av objektet CultureInfo som tilldelats egenskapen System.Threading.Thread.CurrentThread.CurrentUICulture . När en tråd startas bestäms dess användargränssnittskultur inledningsvis enligt följande:

  • Genom att hämta kulturen som anges av DefaultThreadCurrentUICulture-egenskapen i den programdomän som tråden kör i, om egenskapsvärdet inte är null.

  • Om tråden är en trådpoolstråd som kör en aktivitetsbaserad asynkron åtgärd bestäms dess användargränssnittskultur av användargränssnittskulturen i den anropande tråden. I följande exempel ändras den aktuella användargränssnittskulturen till portugisiska (Brasilien) och sex aktiviteter startas, där var och en visar sitt tråd-ID, sitt aktivitets-ID och sin aktuella användargränssnittskultur. Var och en av uppgifterna (och trådarna) har ärvt UI-kulturen från den anropande tråden.

    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
    

    Mer information finns i Kultur och aktivitetsbaserade asynkrona åtgärder.

  • Genom att anropa Windows-funktionen GetUserDefaultUILanguage .

Om du vill ändra användargränssnittskulturen som används av en tråd anger du Thread.CurrentUICulture egenskapen till den nya kulturen. Om du uttryckligen ändrar en tråds användargränssnittskultur på det här sättet bevaras ändringen om tråden korsar programdomängränserna.

Note

Om du anger egenskapsvärdet till ett CultureInfo objekt som representerar en ny kultur ändras även värdet för Thread.CurrentThread.CurrentCulture egenskapen.

Hämta den aktuella användargränssnittskulturen

Egenskapen CultureInfo.CurrentUICulture är en inställning per tråd. Varje tråd kan ha en egen användargränssnittskultur. Du får användargränssnittskulturen i den aktuella tråden genom att hämta värdet för CultureInfo.CurrentUICulture egenskapen, vilket visas i följande exempel.

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]

Du kan också hämta värdet för den aktuella trådens användargränssnittskultur från Thread.CurrentUICulture egenskapen .

Ange uttryckligen den aktuella användargränssnittskulturen

Du kan ändra den aktuella användargränssnittskulturen genom att tilldela ett CultureInfo objekt som representerar den nya kulturen till CultureInfo.CurrentUICulture egenskapen. Den aktuella användargränssnittskulturen kan anges till antingen en specifik kultur (till exempel en-US eller de-DE) eller till en neutral kultur (till exempel en eller de). I följande exempel anges den aktuella användargränssnittskulturen till fr-FR eller franska (Frankrike).

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

I ett flertrådat program kan du uttryckligen ange användargränssnittskulturen för valfri tråd genom att tilldela ett CultureInfo objekt som representerar den kulturen till trådens Thread.CurrentUICulture egenskap. Om den tråd vars kultur du vill ange är den aktuella tråden kan du tilldela den nya kulturen till CultureInfo.CurrentUICulture egenskapen. När användargränssnittskulturen i en tråd anges explicit behåller tråden samma kultur även om den korsar programdomängränserna och kör kod i en annan programdomän.

Ange implicit den aktuella användargränssnittskulturen

När en tråd, inklusive huvudprogramtråden, först skapas, anges dess aktuella användargränssnittskultur som standard på följande sätt:

  • Genom att använda den kultur som definieras av den DefaultThreadCurrentUICulture-egenskapen för den aktuella programdomänen om egenskapsvärdet inte är null.
  • Genom att använda systemets standardkultur. På system som använder Windows-operativsystemet anropar den vanliga språkkörningen Windows-funktionen GetUserDefaultUILanguage för att ange den aktuella användargränssnittskulturen. GetUserDefaultUILanguage returnerar standardkulturen för användargränssnittet som angetts av användaren. Om användaren inte har angett ett standardspråk för användargränssnittet returneras den kultur som ursprungligen installerades i systemet.

Om tråden korsar programgränser och kör kod i en annan programdomän bestäms dess kultur på samma sätt som för en nyligen skapad tråd.

Observera att om du anger en specifik användargränssnittskultur som skiljer sig från den systeminstallerade användargränssnittskulturen eller användarens föredragna användargränssnittskultur och programmet startar flera trådar, är den aktuella användargränssnittskulturen för dessa trådar den kultur som returneras av GetUserDefaultUILanguage funktionen, såvida du inte tilldelar en kultur till DefaultThreadCurrentUICulture egenskapen i programdomänen där tråden körs.

Säkerhetsfrågor

För att ändra kulturen i den aktuella tråden krävs en SecurityPermission behörighet med ControlThread värde inställt.

Caution

Det är farligt att manipulera trådar på grund av det säkerhetstillstånd som är associerat med trådar. Därför bör den här behörigheten endast ges till tillförlitlig kod och sedan endast efter behov. Du kan inte ändra trådkulturen i halvbetrodd kod.

Gäller för

Se även