CultureInfo.CurrentUICulture Vlastnost

Definice

Získá nebo nastaví objekt, který představuje aktuální jazykovou verzi uživatelského rozhraní použitou Resource Manager k vyhledávání prostředků specifických pro jazykovou CultureInfo verzi za běhu.

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

Hodnota vlastnosti

CultureInfo

Jazyková verze používaná Resource Manager k vyhledávání prostředků specifických pro jazykovou verzi za běhu.

Výjimky

Vlastnost je nastavená na null .

Vlastnost je nastavená na název jazykové verze, který nelze použít k vyhledání souboru prostředků. Názvy souborů prostředků mohou obsahovat pouze písmena, číslice, spojovníky nebo podtržítka.

Příklady

Následující příklad kódu ukazuje, jak změnit a CurrentCulture CurrentUICulture aktuálního vlákna.

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 Example
{
   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.

Poznámky

Aktuální jazyková verze uživatelského rozhraní je vlastnost pro vlákno. To znamená, že každé vlákno má svou vlastní aktuální jazykovou verzi uživatelského rozhraní. Tato vlastnost je ekvivalentní načtení nebo (počínaje .NET Framework 4.6) nastavením objektu CultureInfo přiřazeného k System.Threading.Thread.CurrentThread.CurrentUICulture vlastnosti . Při spuštění vlákna se jeho jazyková verze uživatelského rozhraní zpočátku určí takto:

  • Načtením jazykové verze, která je určena vlastností v doméně aplikace, ve které je vlákno spuštěno, pokud DefaultThreadCurrentUICulture hodnota vlastnosti není null .

  • Pokud je vlákno vlákno fondu vláken, které spouští asynchronní operaci založenou na úlohách a aplikace cílí na .NET Framework 4.6 nebo novější verzi .NET Framework, je jeho jazyková verze uživatelského rozhraní určena jazykovou verzí uživatelského rozhraní volajícího vlákna. Následující příklad změní aktuální jazykovou verzi uživatelského rozhraní na portugalštinu (Brazílie) a spustí šest úkolů, z nichž každý zobrazí ID vlákna, ID úkolu a aktuální jazykovou verzi uživatelského rozhraní. Každý z úkolů (a vláken) zdědil jazykovou verzi uživatelského rozhraní volajícího vlákna.

    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
    

    Další informace najdete v části "Jazyková verze a asynchronní operace založené na úlohách" v CultureInfo tématu .

  • Voláním Windows GetUserDefaultUILanguage funkce.

Poznámka

V prostředí .NET Compact Framework je vlastnost CurrentUICulture jen pro čtení. Aktuální jazyková verze uživatelského rozhraní je určená regionálními nastaveními systému a nelze ji změnit prostřednictvím kódu programu.

Počínaje verzí .NET Framework 4.6 pro změnu jazykové verze uživatelského rozhraní používané vláknem nastavte vlastnost Thread.CurrentUICulture na novou jazykovou verzi. Pokud tímto způsobem explicitně změníte jazykovou verzi uživatelského rozhraní vlákna, tato změna se zachová, pokud vlákno překročí hranice domény aplikace.

Poznámka

V .NET Framework 4.5.2 a starších verzích je vlastnost jen CurrentUICulture pro čtení. To znamená, že můžete načíst hodnotu vlastnosti, ale nemůžete ji nastavit. Pokud chcete změnit aktuální jazykovou verzi uživatelského rozhraní, přiřaďte objekt, který představuje novou jazykovou verzi uživatelského CultureInfo rozhraní, vlastnosti Thread.CurrentThread.CurrentUICulture . Počínaje .NET Framework 4.6 je vlastnost pro čtení i zápis. Hodnotu vlastnosti můžete nastavit i CultureInfo.CurrentUICulture načíst. Pokud nastavíte hodnotu vlastnosti na objekt, který představuje novou jazykovou CultureInfo verzi, hodnota Thread.CurrentThread.CurrentCulture vlastnosti se také změní.

V této části:

Získání aktuální jazykové verze uživatelského rozhraní
Explicitní nastavení aktuální jazykové verze uživatelského rozhraní
Implicitní nastavení aktuální jazykové verze uživatelského rozhraní
Důležité informace o zabezpečení
Aktuální jazyková verze uživatelského rozhraní a Windows aplikací\

Získání aktuální jazykové verze uživatelského rozhraní

Vlastnost CultureInfo.CurrentUICulture je nastavení pro jednotlivá vlákna. To znamená, že každé vlákno může mít svou vlastní jazykovou verzi uživatelského rozhraní. Jazykovou verzi uživatelského rozhraní aktuálního vlákna získáte načtením hodnoty vlastnosti , jak CultureInfo.CurrentUICulture je znázorněno v následujícím příkladu.

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]

Hodnotu jazykové verze uživatelského rozhraní aktuálního vlákna můžete také načíst z Thread.CurrentUICulture vlastnosti .

Explicitní nastavení aktuální jazykové verze uživatelského rozhraní

Počínaje verzí .NET Framework 4.6 můžete změnit aktuální jazykovou verzi uživatelského rozhraní přiřazením objektu, který představuje novou jazykovou verzi CultureInfo CultureInfo.CurrentUICulture vlastnosti. Aktuální jazyková verze uživatelského rozhraní může být nastavena buď na konkrétní jazykovou verzi (například en-US nebo de-DE), nebo na neutrální jazykovou verzi (například en nebo de). Následující příklad nastaví aktuální jazykovou verzi uživatelského rozhraní na fr-FR nebo francouzštinu (Francie).

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

Ve vícevláknové aplikaci můžete explicitně nastavit jazykovou verzi uživatelského rozhraní libovolného vlákna přiřazením objektu, který představuje tuto jazykovou verzi k CultureInfo vlastnosti Thread.CurrentUICulture vlákna. Pokud je vlákno, jehož jazykovou verzi chcete nastavit, aktuálním vláknem, můžete přiřadit novou jazykovou verzi k CultureInfo.CurrentUICulture vlastnosti . Pokud je jazyková verze uživatelského rozhraní vlákna nastavena explicitně, toto vlákno zachová stejnou jazykovou verzi i v případě, že překročí hranice domény aplikace a spustí kód v jiné doméně aplikace.

Implicitní nastavení aktuální jazykové verze uživatelského rozhraní

Při prvním vytvoření vlákna, včetně hlavního vlákna aplikace, je ve výchozím nastavení jeho aktuální jazyková verze uživatelského rozhraní nastavena takto:

  • Pomocí jazykové verze definované DefaultThreadCurrentUICulture vlastností pro aktuální doménu aplikace, pokud hodnota vlastnosti není null .

  • Pomocí výchozí jazykové verze systému. V systémech, které používají Windows systému, volá modul CLR funkci Windows, která nastaví aktuální jazykovou verzi GetUserDefaultUILanguage uživatelského rozhraní. GetUserDefaultUILanguage vrací výchozí jazykovou verzi uživatelského rozhraní nastavenou uživatelem. Pokud uživatel nenastaví výchozí jazyk uživatelského rozhraní, vrátí jazykovou verzi, která byla v systému původně nainstalovaná.

Pokud vlákno překročí hranice aplikace a spustí kód v jiné doméně aplikace, jeho jazyková verze se určí stejným způsobem jako u nově vytvořeného vlákna.

Všimněte si, že pokud nastavíte konkrétní jazykovou verzi uživatelského rozhraní, která se liší od jazykové verze uživatelského rozhraní nainstalovaného systémem nebo preferované jazykové verze uživatelského rozhraní uživatele, a vaše aplikace spustí více vláken, aktuální jazyková verze uživatelského rozhraní těchto vláken bude jazyková verze vrácená funkcí, pokud k vlastnosti v doméně aplikace, ve které je vlákno spuštěno, přiřadíte jazykovou GetUserDefaultUILanguage DefaultThreadCurrentUICulture verzi.

Aspekty zabezpečení

Změna jazykové verze aktuálního vlákna vyžaduje SecurityPermission oprávnění s ControlThread nastavenou hodnotou.

Upozornění

Manipulace s vlákny je nebezpečné kvůli stavu zabezpečení přidruženému k vláknům. Proto by toto oprávnění mělo být uděleno pouze důvěryhodnému kódu a poté pouze v případě potřeby. Jazykovou verzi vlákna nelze změnit v částečně důvěryhodném kódu.

Aktuální jazyková verze uživatelského rozhraní a aplikace pro UPW

V aplikacích pro Univerzální platformu Windows Platform (UPW) je vlastnost pro čtení i zápis stejně jako v aplikacích .NET Framework a .NET Core. Můžete ji použít k získání i k nastavení aktuální jazykové CurrentUICulture verze. Aplikace pro UPW ale nerozlišují mezi aktuální jazykovou verzí a aktuální jazykovou verzí uživatelského rozhraní. Vlastnosti CurrentCulture CurrentUICulture a se mapovat na první hodnotu v Windows. Kolekce ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages.

V .NET Framework a .NET Core je aktuální jazyková verze uživatelského rozhraní nastavení pro vlákno a vlastnost odráží pouze jazykovou verzi uživatelského CurrentUICulture rozhraní aktuálního vlákna. V aplikacích pro UPW se aktuální jazyková verze mapuje na Windows. Vlastnost ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages, což je globální nastavení. Nastavení vlastnosti CurrentCulture změní jazykovou verzi celé aplikace. Jazykovou verzi nelze nastavit pro vlákno.

Platí pro

Viz také