CultureInfo.CurrentCulture Vlastnost

Definice

Získá nebo nastaví CultureInfo objekt, který představuje jazykovou verzi používanou aktuálním vláknem a asynchronními operacemi založenými na úlohách.

public:
 static property System::Globalization::CultureInfo ^ CurrentCulture { System::Globalization::CultureInfo ^ get(); void set(System::Globalization::CultureInfo ^ value); };
public:
 static property System::Globalization::CultureInfo ^ CurrentCulture { System::Globalization::CultureInfo ^ get(); };
public static System.Globalization.CultureInfo CurrentCulture { get; set; }
public static System.Globalization.CultureInfo CurrentCulture { get; }
static member CurrentCulture : System.Globalization.CultureInfo with get, set
static member CurrentCulture : System.Globalization.CultureInfo
Public Shared Property CurrentCulture As CultureInfo
Public Shared ReadOnly Property CurrentCulture As CultureInfo

Hodnota vlastnosti

Jazyková verze používaná aktuálními vlákny a asynchronními operacemi založenými na úlohách.

Výjimky

Vlastnost je nastavena na nullhodnotu .

Příklady

Následující příklad ukazuje, jak změnit CurrentCulture a CurrentUICulture aktuální vlákno.

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.

Poznámky

Objekt CultureInfo vrácený prostřednictvím vlastnosti CurrentCulture a jeho přidruženými objekty určuje výchozí formát pro data, časy, čísla a hodnoty měny, způsob řazení textu, konvence pro velikost písmen a porovnání řetězců.

Aktuální kultura je vlastnost spuštěného vlákna. Když tuto vlastnost nastavíte na CultureInfo objekt, který představuje novou kulturu, hodnota vlastnosti Thread.CurrentThread.CurrentCulture se rovněž změní. Doporučujeme však vždy použít vlastnost CultureInfo.CurrentCulture k získání a nastavení aktuálního prostředí.

Objekt CultureInfo , který tato vlastnost vrací, je jen pro čtení. To znamená, že nemůžete měnit stávající objekt, například změnou DateTimeFormat. Pokud chcete změnit formát data a času nebo jiný aspekt aktuální jazykové verze, vytvořte nový objekt CultureInfo a přiřaďte jej k této vlastnosti.

Jak se určuje kultura vlákna

Když je vlákno spuštěno, jeho kultura je původně určena následujícím způsobem:

  • Načtením kultury určené vlastností DefaultThreadCurrentCulture v aplikační doméně, ve které je vlákno spuštěno, pokud hodnota vlastnosti není null.

  • Pokud je vlákno vlákno fondu vláken, které spouští asynchronní operaci založenou na úlohách, její jazyková verze je určena jazykovou verzí volajícího vlákna. Následující příklad změní aktuální jazykovou verzi na portugalštinu (Brazílie) a spustí šest úkolů, z nichž každý zobrazí ID vlákna, ID úkolu a aktuální jazykovou verzi. Každá úloha (a také vlákna) zdědila kulturní nastavení volajícího vlákna.

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Threading;
    using System.Threading.Tasks;
    
    public class Example14
    {
        public static async Task Main()
        {
            var tasks = new List<Task>();
            Console.WriteLine($"The current culture is {Thread.CurrentThread.CurrentCulture.Name}");
            Thread.CurrentThread.CurrentCulture = new CultureInfo("pt-BR");
            // Change the current culture to Portuguese (Brazil).
            Console.WriteLine($"Current culture changed to {Thread.CurrentThread.CurrentCulture.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($"Culture of task {Task.CurrentId} on thread {Thread.CurrentThread.ManagedThreadId} is {Thread.CurrentThread.CurrentCulture.Name}");
                }));
    
            await Task.WhenAll(tasks.ToArray());
        }
    }
    
    // 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
    
    Imports System.Globalization
    Imports System.Threading
    
    Module Example1
        Public Sub S1()
            Dim tasks As New List(Of Task)
            Console.WriteLine("The current culture is {0}",
                            Thread.CurrentThread.CurrentCulture.Name)
            Thread.CurrentThread.CurrentCulture = New CultureInfo("pt-BR")
            ' Change the current culture to Portuguese (Brazil).
            Console.WriteLine("Current culture changed to {0}",
                            Thread.CurrentThread.CurrentCulture.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.CurrentCulture.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 naleznete v tématu Kultura a asynchronní operace založené na úlohách.

  • Voláním funkce GetUserDefaultLocaleName ve Windows nebo funkce uloc_getDefault z ICU, která aktuálně volá POSIX funkci setlocale s kategorií LC_MESSAGES v systémech podobných Unixu.

Všimněte si, že pokud nastavíte konkrétní jazykovou verzi, která se liší od jazykové verze nainstalované systémem nebo upřednostňované jazykové verze uživatele a vaše aplikace spustí více vláken, bude aktuální jazyková verze těchto vláken vrácená GetUserDefaultLocaleName funkcí, pokud nepřiřadíte jazykovou verzi vlastnosti DefaultThreadCurrentCulture v doméně aplikace, ve které je vlákno spuštěno.

Další informace o tom, jak je určena kultura vlákna, naleznete v části Kultura a vlákna na CultureInfo referenční stránce.

Získat aktuální nastavení kultury

Vlastnost CultureInfo.CurrentCulture je nastavením na úrovni jednotlivých vláken; to znamená, že každé vlákno může mít svou vlastní kulturu. Kulturu aktuálního vlákna získáte získáním hodnoty vlastnosti CultureInfo.CurrentCulture, jak ukazuje následující příklad.

using System;
using System.Globalization;

public class Example5
{
   public static void Main()
   {
      CultureInfo culture = CultureInfo.CurrentCulture;
      Console.WriteLine($"The current culture is {culture.NativeName} [{culture.Name}]");
   }
}

// The example displays output like the following:
//       The current culture is English (United States) [en-US]
Imports System.Globalization

Module Example3
    Public Sub S1()
        Dim culture As CultureInfo = CultureInfo.CurrentCulture
        Console.WriteLine("The current culture is {0} [{1}]",
                        culture.NativeName, culture.Name)
    End Sub
End Module
' The example displays output like the following:
'     The current culture is English (United States) [en-US]

Explicitně nastavte vlastnost CurrentCulture.

Pokud chcete změnit jazykovou verzi používanou existujícím vláknem, nastavíte CultureInfo.CurrentCulture vlastnost na novou jazykovou verzi. Následující příklad změní aktuální jazykovou verzi vlákna na holandštinu (Nizozemsko).

using System;
using System.Globalization;
using System.Threading;

public class Info11 : MarshalByRefObject
{
    public void ShowCurrentCulture()
    {
        Console.WriteLine($"Culture of thread {Thread.CurrentThread.Name}: {CultureInfo.CurrentCulture.Name}");
    }
}

public class SetCultureExample
{
    public static void Run()
    {
        Info11 inf = new Info11();
        // Set the current culture to Dutch (Netherlands).
        Thread.CurrentThread.Name = "MainThread";
        CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("nl-NL");
        inf.ShowCurrentCulture();
    }
}

// The example displays the following output:
//
//     Culture of thread MainThread: nl-NL

Note

Změna kultury pomocí CultureInfo.CurrentCulture vlastnosti vyžaduje SecurityPermission oprávnění s nastavenou hodnotou ControlThread. Manipulace s vlákny je nebezpečná z důvodu stavu zabezpečení spojeného s vlákny. 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. Kulturu vlákna nelze změnit v částečně důvěryhodném kódu.

Aktuální jazykovou verzi vlákna můžete explicitně změnit na konkrétní jazykovou verzi (například francouzštinu (Kanada) nebo neutrální jazykovou verzi (například francouzštinu). Pokud objekt představuje neutrální kulturu, hodnoty vlastností, jako je CultureInfo, CultureInfo, Calendar, CompareInfo a DateTimeFormat, odrážejí konkrétní kulturu, která je přidružena k neutrální kultuře. Například dominantní kultura anglické neutrální kultury je angličtina (Spojené státy); dominantní kulturou německé kultury je němčina (Německo). Následující příklad ukazuje rozdíl ve formátování, když je aktuální jazyková verze nastavena na konkrétní jazykovou verzi, francouzštinu (Kanada) a neutrální jazykovou verzi, francouzštinu.

using System;
using System.Globalization;
using System.Threading;

public class Example12
{
   public static void Main()
   {
      double value = 1634.92;
      CultureInfo.CurrentCulture = new CultureInfo("fr-CA");
      Console.WriteLine($"Current Culture: {CultureInfo.CurrentCulture.Name}");
      Console.WriteLine($"{value:C2}\n");

      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr");
      Console.WriteLine($"Current Culture: {CultureInfo.CurrentCulture.Name}");
      Console.WriteLine($"{value:C2}");
   }
}

// The example displays the following output:
//       Current Culture: fr-CA
//       1 634,92 $
//
//       Current Culture: fr
//       1 634,92 €
Imports System.Globalization
Imports System.Threading

Module Example4
    Public Sub S1()
        Dim value As Double = 1634.92
        CultureInfo.CurrentCulture = New CultureInfo("fr-CA")
        Console.WriteLine("Current Culture: {0}",
                        CultureInfo.CurrentCulture.Name)
        Console.WriteLine("{0:C2}", value)
        Console.WriteLine()

        Thread.CurrentThread.CurrentCulture = New CultureInfo("fr")
        Console.WriteLine("Current Culture: {0}",
                        CultureInfo.CurrentCulture.Name)
        Console.WriteLine("{0:C2}", value)
    End Sub
End Module
' The example displays the following output:
'       Current Culture: fr-CA
'       1 634,92 $
'       
'       Current Culture: fr
'       1 634,92 €

Aktuální kultura a přepsání uživatele

Systém Windows umožňuje uživatelům přepsat standardní hodnoty vlastností objektu CultureInfo a přidružených objektů pomocí místních a jazykových možností v Ovládacích panelech. Objekt CultureInfo vrácený vlastností CurrentCulture odráží uživatelská přepsání v následujících případech:

  • Pokud je aktuální jazyková verze vlákna nastavena implicitně funkcí systému Windows GetUserDefaultLocaleName.
  • Pokud aktuální kulturní nastavení vlákna definované DefaultThreadCurrentCulture vlastností odpovídá aktuálnímu systémovému kulturnímu nastavení Windows.
  • Pokud je aktuální jazyková verze vlákna nastavena explicitně na jazykovou verzi vrácenou metodou CreateSpecificCulture a tato jazyková verze odpovídá aktuální jazykové verzi systému Windows.
  • Pokud je aktuální kultura vlákna nastavena explicitně na kulturu vytvořenou pomocí CultureInfo(String) konstruktoru a tato kultura odpovídá aktuální kultuře systému Windows.

V některých případech, zejména u serverových aplikací, může být nastavení aktuálního místního nastavení na CultureInfo objekt, který odráží přepsání uživatele, nežádoucí. Místo toho můžete aktuální národní prostředí nastavit na CultureInfo objekt, který neodráží upravy od uživatele.

Platí pro

Viz také