This article has been localized into Czech by the community.
Kultura aplikace a UICulture
Jak jsme diskutovali v předchozím článku, zpracování kultur je velmi důležité, zejména při práci s daty a čísly. Z tohoto důvodu bude vaše aplikace vždy mít definovanou instanci třídy CultureInfo jako "CurrentCulture" - záložní instanci pro všechny situace, kde konkrétně neudáte, která kultura by měla být použita, například pro výstup čísla. Pokud tuto vlastnost, která existuje na třídě CultureInfo, nezměníte, bude stejná jako kultura používaná vaším operačním systémem. Zde je jednoduchý způsob, jak to zkontrolovat:
Console.WriteLine("Current culture: " + CultureInfo.CurrentCulture.Name);
V tomto článku budeme po celou dobu používat třídu CultureInfo, takže nezapomeňte ji zahrnout s použitím příkazu using, jak je ukázáno na začátku příkladu.
Příklad vypíše kulturu používanou vaší aplikací, například "en-US" pro počítač běžící s anglickým jazykem ve Spojených státech. Pokud žijete v Německu a váš počítač používá německý jazyk, výsledek bude místo toho "de-DE". Jinými slovy, první dvě písmena určují jazyk, zatímco poslední dvě písmena určují zemi nebo region.
Nicméně, je možné, že chcete mít větší kontrolu nad tím, která kultura je vaší aplikací používána. Například, pokud vaše aplikace používá angličtinu všude, dává smysl vypisovat čísla ve formátu německém nebo švédském, jen protože počítač vašeho uživatele to tak specifikuje? Možná ano, ale pokud ne, můžete velmi snadno určit novou výchozí/nouzovou kulturu, použitím vlastnosti CurrentCulture znovu:
CultureInfo.CurrentCulture = new CultureInfo("en-US");
Console.WriteLine("Current culture: " + CultureInfo.CurrentCulture.Name);
float largeNumber = 12345.67f;
Console.WriteLine("Number format (Current culture): " + largeNumber.ToString());
CultureInfo germanCulture = new CultureInfo("de-DE");
Console.WriteLine("Number format (German): " + largeNumber.ToString(germanCulture));
V podstatě přepíšeme vlastnost CurrentCulture nastavením na kulturu en-US. Poté ji vypíšeme spolu s velkým číslem s plovoucí desetinnou čárkou. Uvidíte, že výsledek je číslo formátované tak, jak je zvykem v angličtině. V posledních několika řádcích ilustrujeme, jak můžete samozřejmě přepsat výchozí kulturu předáním jiné instance CultureInfo metodě ToString() - v tomto případě bude číslo vypsané ve formátu německém také. Výsledek tohoto příkladu by měl vypadat nějak takto:
Current culture: en-US
Number format (Current culture): 12345.67
Number format (German): 12345,67
CurrentCulture vs. CurrentUICulture
Můžete si všimnout, že třída CultureInfo má také vlastnost nazvanou CurrentUICulture. Tato vlastnost je relevantní pouze v případě, že používáte soubory prostředků pro lokalizaci uživatelského rozhraní - v takovém případě bude vaše aplikace vědět, které verze souborů prostředků by měly být načteny, na základě vlastnosti CurrentUICulture. Pro všechny ostatní účely, včetně formátování čísel, data a tak dále, byste měli používat vlastnost CurrentCulture.
CurrentCulture a Threads (vlákna)
O vláknech jsme zatím skutečně nemluvili, ale je to v podstatě koncept, který umožňuje vaší aplikaci pracovat na několika věcech současně. Když je aplikace .NET spuštěna, vytvoří se jedno vlákno a toto vlákno bude používáno, pokud specificky nevytvoříte nové, pomocí jedné z mnoha strategií pro vícevláknové zpracování frameworku. Zmiňuji to zde, protože je to také velmi relevantní, pokud jde o záložní kulturu vaší aplikace. Ve skutečnosti je CultureInfo.CurrentCulture v podstatě zkratkou pro vlastnost Thread.CurrentThread.CurrentCulture, což znamená, že kdykoli definujete CurrentCulture, platí to pouze pro aktuální vlákno.
Před verzí .NET frameworku 4.5 bylo nutné manuálně specifikovat kulturu každého nově vytvořeného vlákna. Nicméně, v .NET 4.5 byla představena vlastnost CultureInfo.DefaultThreadCurrentCulture. Když ji nastavíte, každé nově vytvořené vlákno bude používat také tuto kulturu a její použití je stejně snadné jako u vlastnosti CurrentCulture.
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("de-DE");
Ale co s existujícím vláknem? Ve skutečnosti, pokud jste již nenastavili jinou kulturu pro vlastnost CurrentCulture, nastavení vlastnosti DefaultThreadCurrentCulture bude také aplikováno na vlastnost CurrentCulture. Jinými slovy, má smysl používat DefaultThreadCurrentCulture místo CurrentCulture, pokud plánujete ve své aplikaci používat více vláken - postará se o všechny scénáře.
Shrnutí
Použitím vlastností CultureInfo.CurrentCulture a/nebo CultureInfo.DefaultThreadCurrentCulture můžete definovat záložní kulturu pro vaši aplikaci - bude vždy použita vždy, když se vypisuje číslo nebo datum, pokud tuto volbu konkrétně v každé situaci nezrušíte.