CultureInfo.CurrentUICulture Właściwość

Definicja

Pobiera lub ustawia CultureInfo obiekt reprezentujący bieżącą kulturę interfejsu użytkownika używaną przez Resource Manager do wyszukiwania zasobów specyficznych dla kultury w czasie wykonywania.

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; }
member this.CurrentUICulture : System.Globalization.CultureInfo with get, set
member this.CurrentUICulture : System.Globalization.CultureInfo
Public Shared Property CurrentUICulture As CultureInfo
Public Shared ReadOnly Property CurrentUICulture As CultureInfo

Wartość właściwości

CultureInfo

Kultura używana przez Resource Manager do wyszukiwania zasobów specyficznych dla kultury w czasie wykonywania.

Wyjątki

Właściwość jest ustawiona na nullwartość .

Właściwość jest ustawiona na nazwę kultury, której nie można użyć do zlokalizowania pliku zasobu. Nazwy plików zasobów mogą zawierać tylko litery, cyfry, łączniki lub podkreślenia.

Przykłady

W poniższym przykładzie kodu pokazano, jak zmienić element CurrentCulture i CurrentUICulture bieżącego wątku.

using namespace System;
using namespace System::Globalization;
using namespace System::Threading;

int main()
{
   // Display the name of the current thread culture.
   Console::WriteLine("CurrentCulture is {0}.", CultureInfo::CurrentCulture->Name);
   
   // Change the current culture to th-TH.
   CultureInfo::CurrentCulture = gcnew CultureInfo("th-TH",false);
   Console::WriteLine("CurrentCulture is now {0}.", CultureInfo::CurrentCulture->Name);
   
   // Displays the name of the CurrentUICulture of the current thread.
   Console::WriteLine("CurrentUICulture is {0}.", CultureInfo::CurrentCulture->Name);
   
   // Changes the CurrentUICulture of the current thread to ja-JP.
   CultureInfo::CurrentUICulture = gcnew CultureInfo("ja-JP",false);
   Console::WriteLine("CurrentUICulture is now {0}.", CultureInfo::CurrentCulture->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.
using System;
using System.Globalization;
using System.Threading;

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 Example
   Public Sub 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)
   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.

Uwagi

Bieżąca kultura interfejsu użytkownika jest właściwością dla wątku. Oznacza to, że każdy wątek ma własną bieżącą kulturę interfejsu użytkownika. Ta właściwość jest równoważna pobieraniu lub, począwszy od .NET Framework 4.6, ustawiając CultureInfo obiekt przypisany do System.Threading.Thread.CurrentThread.CurrentUICulture właściwości. Po uruchomieniu wątku jego kultura interfejsu użytkownika jest początkowo określana w następujący sposób:

  • Przez pobranie kultury określonej przez DefaultThreadCurrentUICulture właściwość w domenie aplikacji, w której jest wykonywany wątek, jeśli wartość właściwości nie nulljest .

  • Jeśli wątek jest wątkiem puli wątków, który wykonuje operację asynchroniczną opartą na zadaniach, a aplikacja jest przeznaczona dla .NET Framework 4.6 lub nowszej wersji .NET Framework, jego kultura interfejsu użytkownika jest określana przez kulturę interfejsu użytkownika wątku wywołującego. Poniższy przykład zmienia bieżącą kulturę interfejsu użytkownika na portugalski (Brazylia) i uruchamia sześć zadań, z których każdy wyświetla identyfikator wątku, identyfikator zadania i bieżącą kulturę interfejsu użytkownika. Każde z zadań (i wątków) dziedziczy kulturę interfejsu użytkownika wątku wywołującego.

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Runtime.Versioning;
    using System.Threading;
    using System.Threading.Tasks;
    
    [assembly:TargetFramework(".NETFramework,Version=v4.6")]
    
    public class Example
    {
       public static async Task Main()
       {
          var tasks = new List<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 (int ctr = 0; ctr <= 5; ctr++)
             tasks.Add(Task.Run( () => {
                                   Console.WriteLine("UI Culture of task {0} on thread {1} is {2}",
                                                     Task.CurrentId,
                                                     Thread.CurrentThread.ManagedThreadId,
                                                     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.Collections.Generic
    Imports System.Globalization
    Imports System.Runtime.Versioning
    Imports System.Threading
    Imports System.Threading.Tasks
    
    <assembly:TargetFramework(".NETFramework,Version=v4.6")>
    
    Module Example
       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 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 culture is en-US
    '     Current 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
    

    Aby uzyskać więcej informacji, zobacz sekcję "Operacje asynchroniczne oparte na kulturze i zadaniach" w temacie CultureInfo .

  • Wywołując funkcję WindowsGetUserDefaultUILanguage.

Uwaga

W programie .NET Compact Framework CurrentUICulture właściwość jest tylko do odczytu. Bieżąca kultura interfejsu użytkownika jest określana przez ustawienia regionalne systemu i nie można jej zmienić programowo.

Począwszy od .NET Framework 4.6, aby zmienić kulturę interfejsu użytkownika używaną przez wątek, ustaw Thread.CurrentUICulture właściwość na nową kulturę. Jeśli w ten sposób jawnie zmienisz kulturę interfejsu użytkownika wątku, ta zmiana będzie się powtarzać, jeśli wątek przekroczy granice domeny aplikacji.

Uwaga

W .NET Framework 4.5.2 i starszych wersjach CurrentUICulture właściwość jest tylko do odczytu; oznacza to, że można pobrać wartość właściwości, ale nie można jej ustawić. Aby zmienić bieżącą kulturę interfejsu użytkownika, należy przypisać CultureInfo obiekt reprezentujący nową kulturę interfejsu Thread.CurrentThread.CurrentUICulture użytkownika do właściwości . Począwszy od .NET Framework 4.6, CultureInfo.CurrentUICulture właściwość jest do odczytu i zapisu; można ustawić i pobrać wartość właściwości. Jeśli ustawisz wartość właściwości na CultureInfo obiekt reprezentujący nową kulturę, wartość Thread.CurrentThread.CurrentCulture właściwości również ulegnie zmianie.

W tej sekcji:

Pobieranie bieżącej kultury interfejsu użytkownika
Jawne ustawianie bieżącej kultury interfejsu użytkownika
Niejawne ustawianie bieżącej kultury interfejsu użytkownika
Zagadnienia dotyczące zabezpieczeń
Bieżąca kultura interfejsu użytkownika i aplikacje Windows\

Pobieranie bieżącej kultury interfejsu użytkownika

Właściwość CultureInfo.CurrentUICulture jest ustawieniem dla wątku; oznacza to, że każdy wątek może mieć własną kulturę interfejsu użytkownika. Kultura interfejsu użytkownika bieżącego wątku jest pobierana przez pobranie wartości CultureInfo.CurrentUICulture właściwości, jak pokazano w poniższym przykładzie.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      CultureInfo culture = CultureInfo.CurrentUICulture;
      Console.WriteLine("The current UI culture is {0} [{1}]",
                        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 Example
   Public Sub Main()
      Dim culture As CultureInfo = CultureInfo.CurrentCulture
      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]

Możesz również pobrać wartość kultury interfejsu użytkownika bieżącego wątku Thread.CurrentUICulture z właściwości .

Jawne ustawianie bieżącej kultury interfejsu użytkownika

Począwszy od .NET Framework 4.6, można zmienić bieżącą kulturę interfejsu użytkownika, przypisując CultureInfo obiekt reprezentujący nową kulturę CultureInfo.CurrentUICulture do właściwości. Bieżąca kultura interfejsu użytkownika może być ustawiona na określoną kulturę (np. en-US lub de-DE) lub neutralną kulturę (np. en lub de). Poniższy przykład ustawia bieżącą kulturę interfejsu użytkownika na fr-FR lub francuski (Francja).

using System;
using System.Globalization;

public class Example
{
   public static void 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);
   }
}
// The example displays output like the following:
//       The current UI culture: en-US
//       The current UI culture: fr-FR
Imports System.Globalization
Imports System.Threading

Module Example
   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

W aplikacji wielowątkowa można jawnie ustawić kulturę interfejsu użytkownika dowolnego wątku, przypisując CultureInfo obiekt reprezentujący ten kulturę do właściwości wątku Thread.CurrentUICulture . Jeśli wątek, którego kultura chcesz ustawić, jest bieżącym wątkiem, możesz przypisać nową kulturę CultureInfo.CurrentUICulture do właściwości . Gdy kultura interfejsu użytkownika wątku jest ustawiana jawnie, ten wątek zachowuje tę samą kulturę, nawet jeśli przekracza granice domeny aplikacji i wykonuje kod w innej domenie aplikacji.

Niejawne ustawianie bieżącej kultury interfejsu użytkownika

Gdy wątek, w tym główny wątek aplikacji, jest tworzony po raz pierwszy, domyślnie jego bieżąca kultura interfejsu użytkownika jest ustawiana w następujący sposób:

  • Przy użyciu kultury zdefiniowanej DefaultThreadCurrentUICulture przez właściwość dla bieżącej domeny aplikacji, jeśli wartość właściwości nie nulljest .

  • Przy użyciu domyślnej kultury systemu. W systemach korzystających z systemu operacyjnego Windows środowisko uruchomieniowe języka wspólnego wywołuje funkcję Windows GetUserDefaultUILanguage w celu ustawienia bieżącej kultury interfejsu użytkownika. GetUserDefaultUILanguage Zwraca domyślną kulturę interfejsu użytkownika ustawioną przez użytkownika. Jeśli użytkownik nie ustawił domyślnego języka interfejsu użytkownika, zwraca kulturę pierwotnie zainstalowaną w systemie.

Jeśli wątek przekracza granice aplikacji i wykonuje kod w innej domenie aplikacji, jego kultura jest określana w taki sam sposób, jak w przypadku nowo utworzonego wątku.

Należy pamiętać, że jeśli ustawisz określoną kulturę interfejsu użytkownika, która różni się od kultury interfejsu użytkownika zainstalowanej przez system lub preferowanej kultury interfejsu użytkownika użytkownika, a aplikacja uruchamia wiele wątków, bieżąca kultura interfejsu użytkownika tych wątków będzie kulturą zwracaną przez GetUserDefaultUILanguage funkcję, chyba że zostanie przypisana kultura do DefaultThreadCurrentUICulture właściwości w domenie aplikacji, w której jest wykonywany wątek.

Zagadnienia związane z zabezpieczeniami

Zmiana kultury bieżącego wątku wymaga SecurityPermission uprawnienia z zestawem ControlThread wartości.

Przestroga

Manipulowanie wątkami jest niebezpieczne ze względu na stan zabezpieczeń skojarzony z wątkami. W związku z tym to uprawnienie powinno być podane tylko do zaufanego kodu, a następnie tylko w razie potrzeby. Nie można zmienić kultury wątków w kodzie częściowo zaufanym.

Bieżąca kultura interfejsu użytkownika i aplikacje platformy UWP

W aplikacjach platformy platforma uniwersalna systemu Windows (UWP) CurrentUICulture właściwość jest do odczytu i zapisu, podobnie jak w aplikacjach platformy .NET Framework i .NET Core. Można jej używać zarówno do pobierania, jak i ustawiania bieżącej kultury. Jednak aplikacje platformy UNIWERSALNEJ systemu Windows nie rozróżniają bieżącej kultury i bieżącej kultury interfejsu użytkownika. Właściwości CurrentCulture i CurrentUICulture są mapowe na pierwszą wartość w Windows. Kolekcja ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages.

W aplikacjach .NET Framework i .NET Core bieżąca kultura interfejsu użytkownika jest ustawieniem dla wątku, a CurrentUICulture właściwość odzwierciedla kulturę interfejsu użytkownika tylko bieżącego wątku. W aplikacjach platformy UNIWERSALNEJ systemu Windows bieżąca kultura jest mapowana na Windows. Właściwość ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages, która jest ustawieniem globalnym. CurrentCulture Ustawienie właściwości zmienia kulturę całej aplikacji; nie można ustawić kultury dla poszczególnych wątków.

Dotyczy

Zobacz też