CultureInfo.CurrentUICulture Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá nebo nastaví CultureInfo objekt, který představuje aktuální jazykovou verzi uživatelského rozhraní používané Resource Manager k vyhledání prostředků specifických pro jazykovou 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; }
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
Hodnota vlastnosti
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 nastavena na název jazykové verze, který nelze použít k vyhledání souboru prostředku. Názvy souborů prostředků můžou obsahovat jenom písmena, číslice, spojovníky nebo podtržítka.
Příklady
Následující příklad kódu ukazuje, jak změnit CurrentCulture a 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 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.
Poznámky
Aktuální jazyková verze uživatelského rozhraní je vlastnost pro jednotlivá vlákna. To znamená, že každé vlákno má vlastní aktuální jazykovou verzi uživatelského rozhraní. Tato vlastnost je ekvivalentní načtení nebo, počínaje rozhraním .NET Framework 4.6, nastavení objektu CultureInfo přiřazeného 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 DefaultThreadCurrentUICulture vlastností v doméně aplikace, ve které se vlákno spouští, pokud hodnota vlastnosti není
null
.Pokud je vlákno vlákno fondu vláken, které provádí asynchronní operaci založenou na úlohách a aplikace cílí na rozhraní .NET Framework 4.6 nebo novější verzi rozhraní .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 úloh, z nichž každá zobrazí ID vlákna, ID úlohy a aktuální jazykovou verzi uživatelského rozhraní. Každá úloha (a vlákna) zdědila 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 funkce Windows
GetUserDefaultUILanguage
.
Poznámka
V rozhraní .NET Compact Framework CurrentUICulture je vlastnost jen pro čtení. Aktuální jazyková verze uživatelského rozhraní je určena místním nastavením systému a nelze ji programově změnit.
Počínaje rozhraním .NET Framework 4.6 chcete změnit jazykovou verzi uživatelského rozhraní používanou vláknem, nastavte Thread.CurrentUICulture vlastnost na novou jazykovou verzi. Pokud tímto způsobem explicitně změníte jazykovou verzi uživatelského rozhraní vlákna, zůstane tato změna zachována, pokud vlákno překročí hranice domény aplikace.
Poznámka
V rozhraní .NET Framework 4.5.2 a starších verzích CurrentUICulture je vlastnost jen pro čtení. To znamená, že můžete načíst hodnotu vlastnosti, ale nemůžete ji nastavit. Chcete-li změnit aktuální jazykovou verzi uživatelského rozhraní, přiřadíte CultureInfo objekt, který představuje novou jazykovou verzi uživatelského rozhraní, Thread.CurrentThread.CurrentUICulture
vlastnosti. Počínaje rozhraním .NET Framework 4.6 CultureInfo.CurrentUICulture je vlastnost pro čtení i zápis. Můžete nastavit i načíst hodnotu vlastnosti. Pokud nastavíte hodnotu vlastnosti na CultureInfo objekt, který představuje novou jazykovou verzi, změní se Thread.CurrentThread.CurrentCulture
také hodnota vlastnosti.
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í
Aspekty zabezpečení
Aktuální kultura uživatelského rozhraní a aplikace pro Windows\
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 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 CultureInfo.CurrentUICulture vlastnosti, jak ukazuje následující příklad.
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]
Z vlastnosti můžete také načíst hodnotu jazykové verze uživatelského rozhraní aktuálního Thread.CurrentUICulture vlákna.
Explicitní nastavení aktuální jazykové verze uživatelského rozhraní
Počínaje rozhraním .NET Framework 4.6 můžete změnit aktuální jazykovou verzi uživatelského rozhraní přiřazením objektu CultureInfo , který představuje novou jazykovou verzi vlastnosti CultureInfo.CurrentUICulture . Aktuální jazyková verze uživatelského rozhraní je možné nastavit 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
V aplikaci s více vlákny můžete explicitně nastavit jazykovou verzi uživatelského rozhraní libovolného vlákna přiřazením objektu CultureInfo , který představuje tuto jazykovou verzi vlastnosti vlákna Thread.CurrentUICulture . Pokud vlákno, jehož jazykovou verzi chcete nastavit, je aktuálním vláknem, můžete k vlastnosti přiřadit novou jazykovou verzi CultureInfo.CurrentUICulture . Pokud je jazyková verze uživatelského rozhraní vlákna explicitně nastavená, toto vlákno si zachová stejnou jazykovou verzi, i když 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, se ve výchozím nastavení nastaví jeho aktuální jazyková verze uživatelského rozhraní takto:
Použitím 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í operační systém Windows, modul CLR (Common Language Runtime) volá funkci Windows
GetUserDefaultUILanguage
, aby nastavil aktuální jazykovou verzi uživatelského rozhraní.GetUserDefaultUILanguage
vrátí výchozí jazykovou verzi uživatelského rozhraní nastavenou uživatelem. Pokud uživatel nenastavil výchozí jazyk uživatelského rozhraní, vrátí jazykovou verzi původně nainstalovanou v systému.
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 nově vytvořené vlákno.
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 aplikace spustí více vláken, aktuální jazyková verze uživatelského rozhraní těchto vláken bude jazykovou verzí vrácenou GetUserDefaultUILanguage
funkcí, pokud nepřiřadíte jazykovou verzi vlastnosti DefaultThreadCurrentUICulture v doméně aplikace, ve které se vlákno spouští.
Aspekty zabezpečení
Změna jazykové verze aktuálního vlákna vyžaduje SecurityPermission oprávnění s nastavenou ControlThread hodnotou.
Upozornění
Manipulace s vlákny je nebezpečná kvůli stavu zabezpečení přidruženému k vláknům. Toto oprávnění by proto mělo být uděleno pouze důvěryhodnému kódu a pak pouze podle potřeby. Nelze změnit jazykovou verzi vlákna v částečně důvěryhodném kódu.
Aktuální jazyková verze uživatelského rozhraní a aplikace pro UPW
V aplikacích Univerzální platforma Windows (UPW) je vlastnost pro čtení i zápis stejně jako v aplikacích CurrentUICulture .NET Framework a .NET Core. Můžete ji použít k získání i nastavení aktuální jazykové verze. Aplikace pro UPW ale nerozlišují mezi aktuální jazykovou verzí a aktuální jazykovou verzí uživatelského rozhraní. Vlastnosti CurrentCulture a CurrentUICulture se mapuje na první hodnotu v kolekci Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages .
V aplikacích .NET Framework a .NET Core je aktuální jazyková verze uživatelského rozhraní nastavením pro jednotlivá vlákna a CurrentUICulture vlastnost odráží pouze jazykovou verzi uživatelského rozhraní aktuálního vlákna. V aplikacích pro UPW se aktuální jazyková verze mapuje na vlastnost Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages , což je globální nastavení. CurrentCulture Nastavení vlastnosti změní jazykovou verzi celé aplikace. Jazykovou verzi nelze nastavit pro jednotlivá vlákna.