CultureInfo Třída

Definice

Poskytuje informace o konkrétní jazykové verzi (označované jako národní prostředí pro vývoj nespravovaného kódu). Mezi informace patří názvy jazykové verze, systém zápisu, použitý kalendář, pořadí řazení řetězců a formátování kalendářních dat a čísel.

public ref class CultureInfo : IFormatProvider
public ref class CultureInfo : ICloneable, IFormatProvider
public class CultureInfo : IFormatProvider
public class CultureInfo : ICloneable, IFormatProvider
[System.Serializable]
public class CultureInfo : ICloneable, IFormatProvider
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class CultureInfo : ICloneable, IFormatProvider
type CultureInfo = class
    interface IFormatProvider
type CultureInfo = class
    interface ICloneable
    interface IFormatProvider
[<System.Serializable>]
type CultureInfo = class
    interface ICloneable
    interface IFormatProvider
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type CultureInfo = class
    interface ICloneable
    interface IFormatProvider
Public Class CultureInfo
Implements IFormatProvider
Public Class CultureInfo
Implements ICloneable, IFormatProvider
Dědičnost
CultureInfo
Atributy
Implementuje

Poznámky

Třída CultureInfo poskytuje informace přidružené ke konkrétní jazykové verzi, jako je jazyk, podlanguage, země/oblast, kalendář a konvence. Tato třída také poskytuje přístup k instancím specifických pro kulturní verzi DateTimeFormatInfo, NumberFormatInfo, CompareInfo a TextInfo objektů. Tyto objekty obsahují informace potřebné pro operace specifické pro jazykovou verzi, jako jsou velikost písmen, formátování datum a čísel, a porovnávání řetězců. Třída CultureInfo se používá buď přímo nebo nepřímo třídami, které formátují, analyzují nebo manipulují s daty specifickými pro jazykovou verzi, například String, DateTime, DateTimeOffset a číselnými typy.

Názvy a identifikátory kultur

Třída CultureInfo určuje jedinečný název pro každou kulturu na základě RFC 4646. Název je kombinací dvoupísmenného nebo třípísmenného kódu jazykové verze ISO 639 přidruženého k jazyku a dvoupísmenného kódu subkultury ISO 3166 přidruženého k zemi nebo oblasti. Kromě toho, pro aplikace běžící na Windows 10 nebo novějších, jsou podporovány názvy kultur, které odpovídají platným jazykovým značkám BCP-47.

Note

Pokud je název kulturní verze předán konstruktoru třídy nebo metodě, jako CreateSpecificCulture nebo CultureInfo, velikost písmen není důležitá.

Formát názvu jazykové verze založené na RFC 4646 je languagecode2-country/regioncode2, kde languagecode2 je dvoupísmenný kód jazyka a country/regioncode2 je dvoupísmenný kód subkultury. Mezi příklady patří ja-JP japonština (Japonsko) a en-US angličtina (USA). V případech, kdy není k dispozici dvoumísmenný kód jazyka, se použije třímísmenný kód definovaný v iso 639-3.

Některé názvy jazykových verzí také určují písmo ISO 15924. Například Cyrl určuje cyrilický skript a Latn určuje latinský skript. Název kultury, který obsahuje písmo, používá vzor languagecode2-scripttag-country/regioncode2. Příkladem tohoto typu názvu jazykové verze je uz-Cyrl-UZ uzbecký (Cyrilice, Uzbekistán). V operačních systémech Windows před systémem Windows Vista název jazykové verze, která obsahuje skript, používá vzor languagecode2-country/regioncode2-scripttag, například uz-UZ-Cyrl pro uzbečtinu (cyrilice, Uzbekistán).

Neutrální kultura je určena pouze dvojpísmenným malým kódem jazyka. fr Například určuje neutrální jazykovou verzi pro francouzštinu a de určuje neutrální jazykovou verzi pro němčinu.

Note

Existují dva názvy kultur, které jsou v rozporu s tímto pravidlem. Čínština (zjednodušená), pojmenovaná zh-Hans, a čínština (tradiční), pojmenovaná zh-Hant, jsou neutrální jazykové verze. Názvy kultur představují aktuální standard a měly by být použity, pokud nemáte důvod pro použití starších názvů zh-CHS a zh-CHT.

Identifikátor jazykové verze je standardní mezinárodní číselná zkratka a má komponenty nezbytné k jednoznačné identifikaci jedné z nainstalovaných jazykových verzí. Vaše aplikace může používat předdefinované identifikátory jazykové verze nebo definovat vlastní identifikátory.

Některé předdefinované názvy a identifikátory jazykové verze jsou používány touto a dalšími třídami v System.Globalization jmenném prostoru. Podrobné kulturní informace pro systémy Windows naleznete ve sloupci Jazyková značka v seznamu názvů jazyků a oblastí podporovaných systémem Windows. Názvy kulturních verzí se řídí standardem definovaným BCP 47.

Názvy a identifikátory kultur představují pouze podmnožinu kultur, které lze nalézt na daném počítači. Verze systému Windows nebo aktualizace Service Pack mohou měnit dostupné jazykové verze. Aplikace mohou přidávat vlastní jazykové verze pomocí CultureAndRegionInfoBuilder třídy. Uživatelé můžou přidat vlastní kulturní nastavení pomocí nástroje Microsoft Locale Builder. Microsoft Locale Builder je napsaný ve spravovaném kódu s použitím třídy CultureAndRegionInfoBuilder.

Několik odlišných názvů je úzce spojeno s kulturou, zejména názvy spojené s následujícími členy třídy:

Invariantní, neutrální a specifické kultury

Jazykové verze jsou obecně seskupeny do tří sad: invariantní jazykové verze, neutrální jazykové verze a specifické jazykové verze.

Invariantní kultura je necitlivá ke kulturním odlišnostem. Vaše aplikace určuje invariantní jazyk pomocí prázdného řetězce ("") nebo jeho identifikátoru. InvariantCulture definuje instanci invariantní kultury. Je přidružen k anglickému jazyku, ale ne k žádné zemi nebo oblasti. Používá se téměř v jakékoli metodě v Globalization oboru názvů, který vyžaduje kulturu.

Neutrální kultura je kultura, která je přidružená k jazyku, ale ne k zemi nebo oblasti. Konkrétní kultura je kultura spojená s jazykem a zemí/regionem. Například fr je neutrální název francouzské jazykové verze a fr-FR je název konkrétní francouzské jazykové verze (Francie). Všimněte si, že čínština (zjednodušená) a čínština (tradiční) jsou také považovány za neutrální jazykové verze.

Vytvoření instance CompareInfo třídy pro neutrální kulturu se nedoporučuje, protože data, která obsahuje, jsou libovolná. Pokud chcete zobrazit a seřadit data, zadejte jazyk i oblast. Vlastnost Name objektu CompareInfo vytvořeného pro neutrální jazykovou verzi navíc vrátí pouze zemi a nezahrnuje oblast.

Definované kultury mají hierarchii, ve které je nadřazenou určité kultury neutrální kultura a nadřazenou neutrální kultury je invariantní kultura. Vlastnost Parent obsahuje neutrální kulturu přidruženou ke konkrétní kultuře. Vlastní jazykové verze by měly definovat Parent vlastnost v souladu s tímto vzorem.

Pokud prostředky pro konkrétní jazykovou verzi nejsou v operačním systému k dispozici, použijí se prostředky pro přidruženou neutrální jazykovou verzi. Pokud prostředky pro neutrální kulturu nejsou k dispozici, použijí se prostředky vložené do hlavního sestavení. Další informace o náhradním procesu prostředků najdete v tématu Balení a nasazení prostředků.

Seznam národních prostředí v rozhraní API systému Windows se mírně liší od seznamu jazykových verzí podporovaných rozhraním .NET. Pokud se vyžaduje interoperabilita s Windows, například prostřednictvím mechanismu p/invoke, měla by aplikace používat konkrétní jazykovou verzi definovanou pro operační systém. Použití konkrétní jazykové verze zajišťuje konzistenci s ekvivalentním národním prostředím Windows, které je identifikováno identifikátorem národního prostředí, který je stejný jako LCID.

A DateTimeFormatInfo nebo a NumberFormatInfo lze vytvořit pouze pro invariantní jazykovou verzi nebo pro konkrétní jazykové verze, nikoli pro neutrální jazyky.

Pokud je DateTimeFormatInfo.CalendarTaiwanCalendar, ale Thread.CurrentCulture není nastaveno na zh-TW, pak DateTimeFormatInfo.NativeCalendarName, DateTimeFormatInfo.GetEraName a DateTimeFormatInfo.GetAbbreviatedEraName vrátí prázdný řetězec ("").

Vlastní kulturní nastavení

Ve Windows můžete vytvořit vlastní národní prostředí. Další informace naleznete v tématu Vlastní lokality.

CultureInfo a kulturní data

.NET odvodí kulturní data ze dvou různých zdrojů v závislosti na operačním systému:

  • Na platformách Unix nebo Windows 10 a novějších verzích poskytují kulturní data knihovna International Components for Unicode. Konkrétní verze knihovny ICU závisí na jednotlivých operačních systémech.
  • V Windows 8.1 a starších verzích jsou kulturní data poskytována operačním systémem Windows.

Z tohoto důvodu nemusí být kulturní nastavení dostupné na konkrétní implementaci, platformě nebo verzi .NET dostupné na jiné implementaci, platformě nebo verzi .NET.

Některé CultureInfo objekty se liší v závislosti na základní platformě. Konkrétně, zh-CN, tedy čínština (zjednodušená, Čína), a zh-TW, tedy čínština (tradiční, Tchaj-wan), jsou dostupné jazykové verze v systémech Windows, ale na systémech Unix jsou to aliasované jazykové verze. "zh-CN" je alias pro jazykovou verzi "zh-Hans-CN" a "zh-TW" je alias pro jazykovou verzi "zh-Hant-TW". Aliasované kultury nejsou vráceny voláním GetCultures metody a mohou mít různé hodnoty vlastností, včetně různých Parent kultur, než jejich protějšky systému Windows. Pro rozdíly v kulturách zh-CN a zh-TW mezi patří:

  • V systémech Windows je nadřazená kultura kultury "zh-CN" "zh-Hans" a nadřazená kultura kultury "zh-TW" je "zh-Hant". Nadřazená kultura obou těchto kultur je "zh". V systémech Unix jsou předkové obou kultur "zh". To znamená, že pokud neposkytujete prostředky specifické pro kultury "zh-CN" nebo "zh-TW", ale poskytujete prostředky pro neutrální kulturu "zh-Hans" nebo "zh-Hant", vaše aplikace načte prostředky pro neutrální kulturu ve systému Windows, ale nikoli v systému Unix. V systémech Unix musíte explicitně nastavit vlákno CurrentUICulture na "zh-Hans" nebo "zh-Hant".

  • V systémech Windows volání funkce CultureInfo.Equals na instanci, která představuje kulturní nastavení "zh-CN", a její předání instanci "zh-Hans-CN" vrátí true. V systémech Unix volání metody vrátí false. Toto chování platí také pro volání instance 'zh-TW' a předání jí instance 'zh-Hant-Tw'.

Dynamická data kultury

S výjimkou invariantní kultury jsou kulturní data dynamická. To platí i pro předdefinované jazykové kultury. Země nebo regiony například přijímají nové měny, mění pravopis svých slov, přizpůsobují preferovaný kalendář a mění definice kulturních vzorců, aby to mohly sledovat. Vlastní kulturní verze se můžou změnit bez upozornění předem, a každá konkrétní kulturní verze může být přepsána vlastní nahrazující kulturou. Jak je popsáno níže, jednotliví uživatelé můžou také přepsat kulturní preference. Aplikace by měly vždy získávat data o jazykové verzi během běhu.

Caution

Při ukládání dat by vaše aplikace měla používat invariantní jazykovou verzi, binární formát nebo konkrétní formát nezávislý na kultuře. Data uložená podle aktuálních hodnot spojených s konkrétní jazykovou verzí, která není neutrální jazykovou verzí, se mohou stát nečitelnými nebo se můžou změnit ve významu, pokud se tato jazyková verze změní.

Aktuální kultura a aktuální kultura uživatelského rozhraní

Každé vlákno v aplikaci .NET má aktuální kulturu a aktuální uživatelskou kulturu. Aktuální kultura určuje konvence formátování pro kalendářní data, časy, čísla a hodnoty měny, pořadí řazení textu, konvence velikosti písmen a způsob porovnávání řetězců. Aktuální jazyk uživatelského rozhraní se používá k načtení lokalizovaných nástrojů za běhu.

Note

Informace o tom, jak se aktuální a aktuální jazyková verze uživatelského rozhraní určuje na základě jednotlivých vláken, najdete v části Jazyková verze a vlákna . Informace o tom, jak je určována aktuální jazyková verze a kultura uživatelského rozhraní na vláknech provádějících asynchronní operace založené na úlohách, najdete v části Jazykové verze a asynchronní operace založené na úlohách.

Podrobnější informace o aktuální kultuře naleznete ve vlastnosti CultureInfo.CurrentCulture. Podrobnější informace o aktuální jazykové verzi uživatelského rozhraní naleznete v tématu vlastnosti CultureInfo.CurrentUICulture.

Načtení aktuální kultury a kultury uživatelského rozhraní

Objekt, který představuje aktuální kulturu, můžete získat CultureInfo jedním ze dvou způsobů:

Následující příklad získá obě hodnoty vlastností, porovná je tak, aby ukázal, že jsou stejné, a zobrazí název aktuální jazykové kultury.

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

public class CurrentCultureEx
{
    public static void Main()
    {
        CultureInfo culture1 = CultureInfo.CurrentCulture;
        CultureInfo culture2 = Thread.CurrentThread.CurrentCulture;
        Console.WriteLine($"The current culture is {culture1.Name}");
        Console.WriteLine($"The two CultureInfo objects are equal: {culture1 == culture2}");
    }
}
// The example displays output like the following:
//     The current culture is en-US
//     The two CultureInfo objects are equal: True

CultureInfo Objekt, který představuje aktuální kulturu uživatelského rozhraní, můžete získat jedním ze dvou způsobů:

Následující příklad načte obě hodnoty vlastností, porovná je, aby ukázal, že jsou stejné, a zobrazí název aktuální jazykové verze uživatelského rozhraní.

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

public class CurrentUIEx
{
    public static void Main()
    {
        CultureInfo uiCulture1 = CultureInfo.CurrentUICulture;
        CultureInfo uiCulture2 = Thread.CurrentThread.CurrentUICulture;
        Console.WriteLine($"The current UI culture is {uiCulture1.Name}");
        Console.WriteLine($"The two CultureInfo objects are equal: {uiCulture1 == uiCulture2}");
    }
}
// The example displays output like the following:
//     The current UI culture is en-US
//     The two CultureInfo objects are equal: True

Nastavte aktuální kulturu a kulturu uživatelského rozhraní

Chcete-li změnit kulturu a jazykovou verzi uživatelského rozhraní vlákna, postupujte následovně:

  1. Vytvořte instanci objektu CultureInfo, který představuje danou kulturu, tím, že zavoláte konstruktor třídy CultureInfo a předáte mu název této kultury. Konstruktor CultureInfo(String) vytvoří instanci objektu CultureInfo, který odráží uživatelská nastavení, pokud je nová jazyková verze stejná jako aktuální jazyková verze systému Windows. Konstruktor CultureInfo(String, Boolean) umožňuje určit, zda nově vytvořený objekt CultureInfo zohledňuje uživatelská přepsání, pokud se nová jazyková verze shoduje s aktuální jazykovou verzí systému Windows.

  2. CultureInfo Přiřaďte objekt k objektu CultureInfo.CurrentCulture nebo CultureInfo.CurrentUICulture vlastnosti.

Následující příklad načte aktuální nastavení kultury. Pokud je to něco jiného než francouzská kultura (Francie), změní současnou kulturu na francouzskou kulturu (Francie). V opačném případě změní aktuální kulturu na francouzštinu (Lucembursko).

using System;
using System.Globalization;

public class ChangeEx1
{
    public static void Main()
    {
        CultureInfo current = CultureInfo.CurrentCulture;
        Console.WriteLine("The current culture is {0}", current.Name);
        CultureInfo newCulture;
        if (current.Name.Equals("fr-FR"))
            newCulture = new CultureInfo("fr-LU");
        else
            newCulture = new CultureInfo("fr-FR");

        CultureInfo.CurrentCulture = newCulture;
        Console.WriteLine("The current culture is now {0}",
                          CultureInfo.CurrentCulture.Name);
    }
}
// The example displays output like the following:
//     The current culture is en-US
//     The current culture is now fr-FR

Následující příklad načte aktuální nastavení kultury. Pokud se jedná o něco jiného než slovinskou kulturu (Slovinsko), změní se současná kultura na slovinskou (Slovinsko). V opačném případě změní aktuální kulturu na chorvatskou (Chorvatsko).

using System;
using System.Globalization;

public class ChangeUICultureEx
{
    public static void Main()
    {
        CultureInfo current = CultureInfo.CurrentUICulture;
        Console.WriteLine($"The current UI culture is {current.Name}");
        CultureInfo newUICulture;
        if (current.Name.Equals("sl-SI"))
            newUICulture = new CultureInfo("hr-HR");
        else
            newUICulture = new CultureInfo("sl-SI");

        CultureInfo.CurrentUICulture = newUICulture;
        Console.WriteLine($"The current UI culture is now {CultureInfo.CurrentUICulture.Name}");
    }
}
// The example displays output like the following:
//     The current UI culture is en-US
//     The current UI culture is now sl-SI

Získejte všechny kultury

Voláním metody GetCultures můžete načíst pole konkrétních kategorií kultur nebo všech kultur dostupných v místním počítači. Můžete například načíst vlastní jazykové verze, konkrétní jazykové verze nebo neutrální jazykové verze buď samostatně, nebo v kombinaci.

Následující příklad volá metodu GetCultures dvakrát, nejprve se členem výčtu System.Globalization.CultureTypes pro načtení všech vlastních jazykových verzí a potom s členem výčtu System.Globalization.CultureTypes pro načtení všech náhradních jazykových verzí.

using System;
using System.Globalization;

public class GetCulturesEx
{
    public static void Main()
    {
        // Get all custom cultures.
        CultureInfo[] custom = CultureInfo.GetCultures(CultureTypes.UserCustomCulture);
        if (custom.Length == 0)
        {
            Console.WriteLine("There are no user-defined custom cultures.");
        }
        else
        {
            Console.WriteLine("Custom cultures:");
            foreach (var culture in custom)
                Console.WriteLine($"   {culture.Name} -- {culture.DisplayName}");
        }
        Console.WriteLine();

        // Get all replacement cultures.
        CultureInfo[] replacements = CultureInfo.GetCultures(CultureTypes.ReplacementCultures);
        if (replacements.Length == 0)
        {
            Console.WriteLine("There are no replacement cultures.");
        }
        else
        {
            Console.WriteLine("Replacement cultures:");
            foreach (var culture in replacements)
                Console.WriteLine($"   {culture.Name} -- {culture.DisplayName}");
        }
        Console.WriteLine();
    }
}
// The example displays output like the following:
//     Custom cultures:
//        x-en-US-sample -- English (United States)
//        fj-FJ -- Boumaa Fijian (Viti)
//
//     There are no replacement cultures.

Kultura a vlákna

Když je spuštěno nové vlákno aplikace, jeho aktuální jazyková verze a aktuální jazyková verze uživatelského rozhraní jsou definovány aktuální systémovou jazykovou verzí, a ne aktuální jazykovou verzí vlákna. Následující příklad znázorňuje rozdíl. Nastaví aktuální kulturu a aktuální jazykovou verzi uživatelského rozhraní vlákna aplikace na francouzskou (Francie) (fr-FR). Pokud je aktuální jazyková verze již fr-FR, příklad ji nastaví na jazykovou verzi angličtiny (USA) (en-US). Zobrazí tři náhodná čísla jako hodnoty měny a pak vytvoří nové vlákno, které pak zobrazí tři další náhodná čísla jako hodnoty měny. Jak ale ukazuje výstup z příkladu, hodnoty měny zobrazené v novém vlákně neodráží konvence formátování jazykové verze francouzštiny (Francie), na rozdíl od výstupu z hlavního vlákna aplikace.

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

public class DefaultThreadEx
{
    static Random rnd = new Random();

    public static void Main()
    {
        if (Thread.CurrentThread.CurrentCulture.Name != "fr-FR")
        {
            // If current culture is not fr-FR, set culture to fr-FR.
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
            Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
        }
        else
        {
            // Set culture to en-US.
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
            Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
        }
        ThreadProc();

        Thread worker = new Thread(ThreadProc);
        worker.Name = "WorkerThread";
        worker.Start();
    }

    private static void DisplayThreadInfo()
    {
        Console.WriteLine($"\nCurrent Thread Name: '{Thread.CurrentThread.Name}'");
        Console.WriteLine($"Current Thread Culture/UI Culture: {Thread.CurrentThread.CurrentCulture.Name}/{Thread.CurrentThread.CurrentUICulture.Name}");
    }

    private static void DisplayValues()
    {
        // Create new thread and display three random numbers.
        Console.WriteLine("Some currency values:");
        for (int ctr = 0; ctr <= 3; ctr++)
            Console.WriteLine($"   {rnd.NextDouble() * 10:C2}");
    }

    private static void ThreadProc()
    {
        DisplayThreadInfo();
        DisplayValues();
    }
}
// The example displays output similar to the following:
//       Current Thread Name: ''
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          8,11 €
//          1,48 €
//          8,99 €
//          9,04 €
//
//       Current Thread Name: 'WorkerThread'
//       Current Thread Culture/UI Culture: en-US/en-US
//       Some currency values:
//          $6.72
//          $6.35
//          $2.90
//          $7.72

Jazykovou verzi a uživatelskou jazykovou verzi všech vláken v aplikační doméně můžete nastavit přiřazením objektu CultureInfo, který představuje tuto kulturu, k vlastnostem DefaultThreadCurrentCulture a DefaultThreadCurrentUICulture. Následující příklad používá tyto vlastnosti, aby všechna vlákna ve výchozí doméně aplikace sdílela stejnou kulturu.

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

public class SetThreadsEx
{
    static Random rnd = new Random();

    public static void Main()
    {
        if (Thread.CurrentThread.CurrentCulture.Name != "fr-FR")
        {
            // If current culture is not fr-FR, set culture to fr-FR.
            CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
            CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
        }
        else
        {
            // Set culture to en-US.
            CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
            CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
        }
        ThreadProc();

        Thread worker = new Thread(SetThreadsEx.ThreadProc);
        worker.Name = "WorkerThread";
        worker.Start();
    }

    private static void DisplayThreadInfo()
    {
        Console.WriteLine($"\nCurrent Thread Name: '{Thread.CurrentThread.Name}'");
        Console.WriteLine($"Current Thread Culture/UI Culture: {Thread.CurrentThread.CurrentCulture.Name}/{Thread.CurrentThread.CurrentUICulture.Name}");
    }

    private static void DisplayValues()
    {
        // Create new thread and display three random numbers.
        Console.WriteLine("Some currency values:");
        for (int ctr = 0; ctr <= 3; ctr++)
            Console.WriteLine($"   {rnd.NextDouble() * 10:C2}");
    }

    private static void ThreadProc()
    {
        DisplayThreadInfo();
        DisplayValues();
    }
}
// The example displays output similar to the following:
//       Current Thread Name: ''
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          6,83 €
//          3,47 €
//          6,07 €
//          1,70 €
//
//       Current Thread Name: 'WorkerThread'
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          9,54 €
//          9,50 €
//          0,58 €
//          6,91 €

Při přiřazování hodnot k vlastnostem DefaultThreadCurrentCulture a DefaultThreadCurrentUICulture, se kultura a jazyková kultura uživatelského rozhraní vláken v doméně aplikace také změní, pokud jim nebyla explicitně přiřazena specifická kultura. Tato vlákna však odrážejí nová nastavení jazykové verze pouze během jejich spuštění v aktuální doméně aplikace. Pokud se tato vlákna spustí v jiné doméně aplikace, stane se jejich jazyková verze výchozí jazykovou verzí definovanou pro danou doménu aplikace. Proto doporučujeme, abyste vždy nastavili kulturní nastavení hlavního aplikačního vlákna a nespoléhali na vlastnosti DefaultThreadCurrentCulture a DefaultThreadCurrentUICulture k jeho změně.

Asynchronní operace založené na kultuře a úkolech

Asynchronní programovací model založený na úlohách používá a Task objekty k asynchronnímu spouštění delegátů ve vláknech fondu vláken. Konkrétní vlákno, na kterém se konkrétní úloha spouští, není předem známo, ale je určeno pouze za běhu.

Jazyková verze je součástí kontextu asynchronní operace. Jinými slovy, asynchronní operace ve výchozím nastavení dědí hodnoty CurrentCulture a CurrentUICulture vlastnosti vlákna, ze kterého jsou spuštěny. Pokud se aktuální jazyková verze nebo aktuální jazyková verze uživatelského rozhraní liší od systémové jazykové verze, aktuální jazyková verze překročí hranice vláken a stane se aktuální jazykovou verzí vlákna fondu vláken, která spouští asynchronní operaci.

Následující příklad obsahuje jednoduchý obrázek. Příklad definuje delegáta Func<TResult> , formatDelegatekterý vrátí některá čísla formátovaná jako hodnoty měny. Příklad změní aktuální kulturní nastavení systému na francouzštinu (Francie) nebo, pokud je francouzština (Francie) již aktuální nastavení, na angličtinu (USA). To pak:

  • Vyvolá delegáta přímo tak, aby běžel synchronně na hlavním vlákně aplikace.
  • Vytvoří úlohu, která spouští delegáta asynchronně na vlákně ve fondu vláken.
  • Vytvoří úlohu, která provádí delegát synchronně v hlavním vlákně aplikace voláním Task.RunSynchronously metody.

Jak ukazuje výstup z příkladu, když se aktuální jazyková verze změní na francouzštinu (Francie), aktuální jazyková verze vlákna, ze kterého jsou úlohy vyvolány asynchronně, se stane aktuální jazykovou verzí pro tuto asynchronní operaci.

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

public class AsyncCultureEx1
{
    public static void Main()
    {
        decimal[] values = { 163025412.32m, 18905365.59m };
        string formatString = "C2";

        string FormatDelegate()
        {
            string output = $"Formatting using the {CultureInfo.CurrentCulture.Name} " +
                $"culture on thread {Thread.CurrentThread.ManagedThreadId}.\n";
            foreach (decimal value in values)
                output += $"{value.ToString(formatString)}   ";

            output += Environment.NewLine;
            return output;
        }

        Console.WriteLine($"The example is running on thread {Thread.CurrentThread.ManagedThreadId}");
        // Make the current culture different from the system culture.
        Console.WriteLine($"The current culture is {CultureInfo.CurrentCulture.Name}");
        if (CultureInfo.CurrentCulture.Name == "fr-FR")
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
        else
            Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");

        Console.WriteLine($"Changed the current culture to {CultureInfo.CurrentCulture.Name}.\n");

        // Execute the delegate synchronously.
        Console.WriteLine("Executing the delegate synchronously:");
        Console.WriteLine(FormatDelegate());

        // Call an async delegate to format the values using one format string.
        Console.WriteLine("Executing a task asynchronously:");
        var t1 = Task.Run(FormatDelegate);
        Console.WriteLine(t1.Result);

        Console.WriteLine("Executing a task synchronously:");
        var t2 = new Task<string>(FormatDelegate);
        t2.RunSynchronously();
        Console.WriteLine(t2.Result);
    }
}
// The example displays the following output:
//         The example is running on thread 1
//         The current culture is en-US
//         Changed the current culture to fr-FR.
//
//         Executing the delegate synchronously:
//         Formatting using the fr-FR culture on thread 1.
//         163 025 412,32 €   18 905 365,59 €
//
//         Executing a task asynchronously:
//         Formatting using the fr-FR culture on thread 3.
//         163 025 412,32 €   18 905 365,59 €
//
//         Executing a task synchronously:
//         Formatting using the fr-FR culture on thread 1.
//         163 025 412,32 €   18 905 365,59 €

Serializace objektu CultureInfo

Při serializaci objektu se skutečně uloží pouze CultureInfo a Name. Úspěšně se deserializuje pouze v prostředí, kde má Name stejný význam. Následující tři příklady ukazují, proč tomu tak není vždy:

  • CultureTypes Pokud je hodnota vlastnosti CultureTypes.InstalledWin32Cultures a pokud byla tato jazyková verze poprvé zavedena v konkrétní verzi operačního systému Windows, není možné ji deserializovat v dřívější verzi systému Windows. Pokud byla například ve Windows 10 zavedena podpora jazykového prostředí, nelze ji deserializovat ve Windows 8.

  • CultureTypes Pokud je hodnota CultureTypes.UserCustomCulture, a počítač, na kterém je deserializována, nemá tuto uživatelskou vlastní kulturu nainstalovanou, není možné ji deserializovat.

  • Pokud je hodnota CultureTypesCultureTypes.ReplacementCultures a počítač, na kterém je deserializována, tuto náhradní jazykovou verzi nemá, deserializuje se na stejný název, ale ne se všemi stejnými vlastnostmi. Pokud je například en-US náhradní jazyková verze v počítači A, ale ne v počítači B, a pokud CultureInfo je objekt odkazující na tuto jazykovou verzi serializován v počítači A a deserializován v počítači B, pak se nepřenáší žádná z vlastních charakteristik jazykové verze. Kultura deserializuje úspěšně, ale s jiným významem.

přepsání Ovládacích panelů

Uživatel se může rozhodnout změnit některé hodnoty spojené s aktuální jazykovou verzí Windows prostřednictvím části Možnosti oblasti a jazyka v Ovládacích panelech. Uživatel se může rozhodnout zobrazit datum v jiném formátu nebo použít jinou měnu než výchozí pro danou kulturu. Obecně platí, že vaše aplikace by měly dodržovat uživatelská nastavení.

Pokud UseUserOverride je true a zadaná jazyková verze odpovídá aktuální jazykové verzi systému Windows, CultureInfo použije tato přepsání, včetně nastavení DateTimeFormatInfo uživatelem pro vlastnosti instance vrácené vlastností DateTimeFormat, a pro vlastnosti instance vrácené vlastností NumberFormatInfo. Pokud jsou uživatelská nastavení nekompatibilní s jazykovou verzí přidruženou k CultureInfo, například pokud vybraný kalendář není jedním ze OptionalCalendars, výsledky metod a hodnoty vlastností nejsou definovány.

Alternativní pořadí řazení

Některé kultury podporují více než jedno pořadí řazení. Příklad:

  • Španělská kultura (Španělsko) má dvě řazení: výchozí mezinárodní řazení a tradiční řazení. Když vytvoříte instanci objektu CultureInfo s názvem jazykové verze es-ES, použije se mezinárodní pořadí řazení. Když vytvoříte instanci objektu CultureInfo s názvem kultury es-ES-tradnl, použije se tradiční pořadí řazení.
  • Kulturní nastavení zh-CN (zjednodušená čínština, ČLR) podporuje dvě pořadí řazení: podle výslovnosti (výchozí) a podle počtu tahů. Když vytvoříte instanci objektu CultureInfo s názvem jazykové verze zh-CN, použije se výchozí pořadí řazení. Když vytvoříte instanci objektu CultureInfo s místním identifikátorem 0x00020804, řetězce se seřadí podle počtu tahů.

Následující tabulka uvádí jazykové verze, které podporují alternativní pořadí řazení a identifikátory pro výchozí a alternativní pořadí řazení.

Název kultury Kultura Výchozí název a identifikátor řazení Alternativní řadicí název a identifikátor
es-ES Španělština (Španělsko) Mezinárodní: 0x00000C0A Tradiční: 0x0000040A
zh-TW Čínština (Tchaj-wan) Počet tahů: 0x00000404 Bopomofo: 0x00030404
zh-CN Čínština (ČLR) Výslovnost: 0x00000804 Počet tahů: 0x00020804
zh-HK Čínština (Hongkong – zvláštní administrativní oblast) Počet tahů: 0x00000c04 Počet tahů: 0x00020c04
zh-SG Čínština (Singapur) Výslovnost: 0x00001004 Počet tahů: 0x00021004
zh-MO Čínština (Macao SAR) Výslovnost: 0x00001404 Počet tahů: 0x00021404
ja-JP Japonština (Japonsko) Výchozí: 0x00000411 Unicode: 0x00010411
ko-KR Korejština (Korea) Výchozí: 0x00000412 Korejština Xwansung – Unicode: 0x00010412
de-DE němčina (Německo) Slovník: 0x00000407 Řazení telefonního seznamu DIN: 0x00010407
hu-HU Maďarština (Maďarsko) Výchozí: 0x0000040e Technické řazení: 0x0001040e
ka-GE Gruzínština (Gruzie) Tradiční: 0x00000437 Moderní řazení: 0x00010437

Příklad

Následující příklad ukazuje, jak vytvořit objekt pro španělštinu CultureInfo (Španělsko) s mezinárodním řazením a dalším CultureInfo objektem s tradičním řazením.

using System;
using System.Globalization;

public class SamplesCultureInfo
{
    public static void Main()
    {
        // Creates and initializes the CultureInfo which uses the international sort.
        CultureInfo myCIintl = new CultureInfo("es-ES", false);

        // Creates and initializes the CultureInfo which uses the traditional sort.
        CultureInfo myCItrad = new CultureInfo(0x040A, false);

        // Displays the properties of each culture.
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "PROPERTY", "INTERNATIONAL", "TRADITIONAL");
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "CompareInfo", myCIintl.CompareInfo, myCItrad.CompareInfo);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "DisplayName", myCIintl.DisplayName, myCItrad.DisplayName);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "EnglishName", myCIintl.EnglishName, myCItrad.EnglishName);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "IsNeutralCulture", myCIintl.IsNeutralCulture, myCItrad.IsNeutralCulture);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "IsReadOnly", myCIintl.IsReadOnly, myCItrad.IsReadOnly);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "LCID", myCIintl.LCID, myCItrad.LCID);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "Name", myCIintl.Name, myCItrad.Name);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "NativeName", myCIintl.NativeName, myCItrad.NativeName);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "Parent", myCIintl.Parent, myCItrad.Parent);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "TextInfo", myCIintl.TextInfo, myCItrad.TextInfo);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "ThreeLetterISOLanguageName", myCIintl.ThreeLetterISOLanguageName, myCItrad.ThreeLetterISOLanguageName);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "ThreeLetterWindowsLanguageName", myCIintl.ThreeLetterWindowsLanguageName, myCItrad.ThreeLetterWindowsLanguageName);
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "TwoLetterISOLanguageName", myCIintl.TwoLetterISOLanguageName, myCItrad.TwoLetterISOLanguageName);
        Console.WriteLine();

        // Compare two strings using myCIintl.
        Console.WriteLine("Comparing \"llegar\" and \"lugar\"");
        Console.WriteLine("   With myCIintl.CompareInfo.Compare: {0}", myCIintl.CompareInfo.Compare("llegar", "lugar"));
        Console.WriteLine("   With myCItrad.CompareInfo.Compare: {0}", myCItrad.CompareInfo.Compare("llegar", "lugar"));
    }
}

/*
This code produces the following output.

PROPERTY                       INTERNATIONAL                                  TRADITIONAL
CompareInfo                    CompareInfo - es-ES                            CompareInfo - es-ES_tradnl
DisplayName                    Spanish (Spain)                                Spanish (Spain)
EnglishName                    Spanish (Spain, International Sort)            Spanish (Spain, Traditional Sort)
IsNeutralCulture               False                                          False
IsReadOnly                     False                                          False
LCID                           3082                                           1034
Name                           es-ES                                          es-ES
NativeName                     Español (España, alfabetización internacional) Español (España, alfabetización tradicional)
Parent                         es                                             es
TextInfo                       TextInfo - es-ES                               TextInfo - es-ES_tradnl
ThreeLetterISOLanguageName     spa                                            spa
ThreeLetterWindowsLanguageName ESN                                            ESP
TwoLetterISOLanguageName       es                                             es

Comparing "llegar" and "lugar"
   With myCIintl.CompareInfo.Compare: -1
   With myCItrad.CompareInfo.Compare: 1

*/
Imports System.Collections
Imports System.Globalization

Module Module1

    Public Sub Main()

        ' Creates and initializes the CultureInfo which uses the international sort.
        Dim myCIintl As New CultureInfo("es-ES", False)

        ' Creates and initializes the CultureInfo which uses the traditional sort.
        Dim myCItrad As New CultureInfo(&H40A, False)

        ' Displays the properties of each culture.
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "PROPERTY", "INTERNATIONAL", "TRADITIONAL")
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "CompareInfo", myCIintl.CompareInfo, myCItrad.CompareInfo)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "DisplayName", myCIintl.DisplayName, myCItrad.DisplayName)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "EnglishName", myCIintl.EnglishName, myCItrad.EnglishName)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "IsNeutralCulture", myCIintl.IsNeutralCulture, myCItrad.IsNeutralCulture)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "IsReadOnly", myCIintl.IsReadOnly, myCItrad.IsReadOnly)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "LCID", myCIintl.LCID, myCItrad.LCID)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "Name", myCIintl.Name, myCItrad.Name)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "NativeName", myCIintl.NativeName, myCItrad.NativeName)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "Parent", myCIintl.Parent, myCItrad.Parent)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "TextInfo", myCIintl.TextInfo, myCItrad.TextInfo)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "ThreeLetterISOLanguageName", myCIintl.ThreeLetterISOLanguageName, myCItrad.ThreeLetterISOLanguageName)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "ThreeLetterWindowsLanguageName", myCIintl.ThreeLetterWindowsLanguageName, myCItrad.ThreeLetterWindowsLanguageName)
        Console.WriteLine("{0,-31}{1,-47}{2,-25}", "TwoLetterISOLanguageName", myCIintl.TwoLetterISOLanguageName, myCItrad.TwoLetterISOLanguageName)
        Console.WriteLine()

        ' Compare two strings using myCIintl.
        Console.WriteLine("Comparing ""llegar"" and ""lugar""")
        Console.WriteLine("   With myCIintl.CompareInfo.Compare: {0}", myCIintl.CompareInfo.Compare("llegar", "lugar"))
        Console.WriteLine("   With myCItrad.CompareInfo.Compare: {0}", myCItrad.CompareInfo.Compare("llegar", "lugar"))

    End Sub



'This code produces the following output.
'
'PROPERTY                       INTERNATIONAL                                  TRADITIONAL              
'CompareInfo                    CompareInfo - es-ES                            CompareInfo - es-ES_tradnl
'DisplayName                    Spanish (Spain)                                Spanish (Spain)          
'EnglishName                    Spanish (Spain, International Sort)            Spanish (Spain, Traditional Sort)
'IsNeutralCulture               False                                          False                    
'IsReadOnly                     False                                          False                    
'LCID                           3082                                           1034                     
'Name                           es-ES                                          es-ES                    
'NativeName                     Español (España, alfabetización internacional) Español (España, alfabetización tradicional)
'Parent                         es                                             es                       
'TextInfo                       TextInfo - es-ES                               TextInfo - es-ES_tradnl  
'ThreeLetterISOLanguageName     spa                                            spa                      
'ThreeLetterWindowsLanguageName ESN                                            ESP                      
'TwoLetterISOLanguageName       es                                             es                       
'
'Comparing "llegar" and "lugar"
'   With myCIintl.CompareInfo.Compare: -1
'   With myCItrad.CompareInfo.Compare: 1

End Module

Konstruktory

Name Description
CultureInfo(Int32, Boolean)

Inicializuje novou instanci CultureInfo třídy na základě jazykové verze určené identifikátorem jazykové verze a na hodnotě, která určuje, zda se má použít nastavení jazykové verze vybrané uživatelem ze systému Windows.

CultureInfo(Int32)

Inicializuje novou instanci CultureInfo třídy na základě jazykové verze určené identifikátorem jazykové verze.

CultureInfo(String, Boolean)

Inicializuje novou instanci CultureInfo třídy na základě jazykové verze určené názvem a na hodnotě, která určuje, zda se má použít nastavení jazykové verze vybrané uživatelem ze systému Windows.

CultureInfo(String)

Inicializuje novou instanci CultureInfo třídy na základě jazykové verze určené názvem.

Vlastnosti

Name Description
Calendar

Získá výchozí kalendář používaný jazykovou verzí.

CompareInfo

CompareInfo Získá, který definuje, jak porovnat řetězce pro jazykovou verzi.

CultureTypes

Získá typy jazykové verze, které se týkají aktuálního CultureInfo objektu.

CurrentCulture

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.

CurrentUICulture

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

DateTimeFormat

Získá nebo nastaví DateTimeFormatInfo , který definuje kulturně vhodný formát zobrazení kalendářních dat a časů.

DefaultThreadCurrentCulture

Získá nebo nastaví výchozí jazykovou verzi pro vlákna v aktuální doméně aplikace.

DefaultThreadCurrentUICulture

Získá nebo nastaví výchozí jazykovou verzi uživatelského rozhraní pro vlákna v aktuální doméně aplikace.

DisplayName

Získá úplný lokalizovaný název jazykové verze.

EnglishName

Získá název jazykové verze ve formátu languagefull [country/regionfull] v angličtině.

IetfLanguageTag

Deprecated. Získá standardní identifikaci RFC 4646 pro jazyk.

InstalledUICulture

CultureInfo Získá, který představuje jazykovou verzi nainstalovanou s operačním systémem.

InvariantCulture

CultureInfo Získá objekt, který je nezávislá na jazykové verzi (invariant).

IsNeutralCulture

Získá hodnotu určující, zda aktuální CultureInfo představuje neutrální jazykovou verzi.

IsReadOnly

Získá hodnotu určující, zda je aktuální CultureInfo jen pro čtení.

KeyboardLayoutId

Získá identifikátor aktivního vstupního národního prostředí.

LCID

Získá identifikátor jazykové verze pro aktuální CultureInfo.

Name

Získá název jazykové verze ve formátu languagecode2-country/regioncode2.

NativeName

Získá název jazykové verze, který se skládá z jazyka, země/oblasti a volitelného skriptu, který jazyková verze nastaví na zobrazení.

NumberFormat

Získá nebo nastaví NumberFormatInfo , který definuje kulturně vhodný formát zobrazení čísel, měny a procenta.

OptionalCalendars

Získá seznam kalendářů, které lze použít jazykovou verzí.

Parent

CultureInfo Získá, který představuje nadřazenou jazykovou verzi aktuálního CultureInfo.

TextInfo

TextInfo Získá ten, který definuje systém zápisu přidružený k jazykové verzi.

ThreeLetterISOLanguageName

Získá ISO 639-2 třímísmenný kód pro jazyk aktuálního CultureInfo.

ThreeLetterWindowsLanguageName

Získá třímísmenný kód jazyka definovaný v rozhraní API Windows.

TwoLetterISOLanguageName

Získá ISO 639-1 dvou-písmeno nebo ISO 639-3 třímísmenný kód pro jazyk aktuálního CultureInfo.

UseUserOverride

Získá hodnotu určující, zda aktuální CultureInfo objekt používá uživatelsky vybrané jazykové nastavení.

Metody

Name Description
ClearCachedData()

Aktualizuje informace související s jazykovou verzí v mezipaměti.

Clone()

Vytvoří kopii aktuálního CultureInfo.

CreateSpecificCulture(String)

Vytvoří, CultureInfo která představuje konkrétní jazykovou verzi přidruženou k zadanému názvu.

Equals(Object)

Určuje, zda zadaný objekt je stejná jazyková verze jako aktuální CultureInfo.

GetConsoleFallbackUICulture()

Získá alternativní jazykovou verzi uživatelského rozhraní vhodná pro konzolové aplikace, pokud výchozí jazyková verze grafického uživatelského rozhraní není vhodná.

GetCultureInfo(Int32)

Načte instanci jazykové verze jen pro čtení v mezipaměti pomocí zadaného identifikátoru jazykové verze.

GetCultureInfo(String, Boolean)

Načte instanci jazykové verze jen pro čtení uloženou v mezipaměti.

GetCultureInfo(String, String)

Načte instanci jazykové verze jen pro čtení uloženou v mezipaměti. Parametry určují jazykovou verzi, která se inicializuje s TextInfoCompareInfo objekty určenými jinou jazykovou verzí.

GetCultureInfo(String)

Načte instanci jazykové verze jen pro čtení uloženou v mezipaměti pomocí zadaného názvu jazykové verze.

GetCultureInfoByIetfLanguageTag(String)

Deprecated. Načte objekt jen CultureInfo pro čtení s lingvistickými charakteristikami identifikovanými zadanou značkou jazyka RFC 4646.

GetCultures(CultureTypes)

Získá seznam podporovaných jazykových verzí filtrovaných zadaným CultureTypes parametrem.

GetFormat(Type)

Získá objekt, který definuje, jak formátovat zadaný typ.

GetHashCode()

Slouží jako hashovací funkce pro aktuální CultureInfo, vhodné pro hashovací algoritmy a datové struktury, jako je například hashovací tabulka.

GetType()

Získá Type aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
ReadOnly(CultureInfo)

Vrátí obálku jen pro čtení kolem zadaného CultureInfo objektu.

ToString()

Vrátí řetězec obsahující název aktuálního CultureInfo kódu ve formátu languagecode2-country/regioncode2.

Platí pro

Viz také