Класовете String и Char зависят от т. нар. култура, която използват. Техните методи Format(…), Compare(…), ToUpper() и ToLower() работят по различен начин за различните езици. Културата влияе и на стандартните форматиращи низове, чрез които се форматират числа, валути и др.
Културите се дефинират от класа System.Globalization.CultureInfo и всяка нишка в приложението има асоциирана с нея култура (инстанция на този клас).
Културата на текущата нишка може да бъде извлечена от свойството CurrentCulture на класа System.Threading.Thread. Ако не бъде указана изрично, по подразбиране текущата култура се извлича от регионалните настройки в контролния панел на Windows.
Културите в .NET Framework
Една култура съдържа информация за календар, формат на дати и часове, формат на числа и валути, таблица за сравнение на низовете, таблица за промяна на регистъра на буквите и др.
Инстанция на класа CultureInfo може да получим чрез конструктора CultureInfo, на който се подава код на език, следван от код на държава:
CultureInfo cultureFrenchCanada = new CultureInfo("fr-CA");
CultureInfo cultureEngUnitedStates = new CultureInfo("en-US");
|
Друг начин за инстанциране на класа CultureInfo е с помощта на статичното му свойство InvariantCulture, което връща инвариантната (общата) култура:
CultureInfo cultureNeutral = CultureInfo.InvariantCulture;
|
Инвариантната култура не е свързана с никой език и държава и се използва, за работа в неутрална среда, примерно за записване на числа в неутрален формат, който не зависи от държавата.
Класът CultureInfo се използва при четене на текстови ресурси, форматиране, парсване, смяна на регистъра, сортиране и други операции, зависещи от настройките на потребителя за език и държава.
По-важните свойства на класа CultureInfo са Calendar, CompareInfo, DateTimeFormat, NumberFormat и TextInfo:
-
Calendar – съдържа календара на културата (григориански, юлиански, еврейски, японски, корейски, тайвански), включващ информация за ерите, високосните години, броя месеци и броя дни за всеки месец в зависимост от годината.
-
CompareInfo –дефинира как да бъдат сравнявани низове за зададената култура.
-
DateTimeFormat – съдържа формата за визуализация на дата и час за зададената култура.
-
NumberFormat – съдържа формата за запис на числата и вида на валутата.
-
TextInfo – дефинира писмеността, асоциирана с текущата култура. Писмеността определя правилата за смяна на регистъра.
За всяко от тези свойства има съответни класове, дефинирани в пространството от имена System.Globalization.
Класът CultureInfo – пример
Със следния пример ще демонстрираме влиянието на културата при форматиране на валута:
using System;
using System.Globalization;
using System.Windows.Forms;
class CulturesDemo
{
static void ShowAmmount(
double aAmmount, CultureInfo aCulture)
{
string message = String.Format(
aCulture, "Ammount: {0:C}", aAmmount);
String caption = aCulture.EnglishName;
MessageBox.Show(message, caption);
}
static void Main()
{
ShowAmmount(137.25, new CultureInfo("bg-BG"));
ShowAmmount(137.25, new CultureInfo("en-US"));
ShowAmmount(137.25, new CultureInfo("de-DE"));
}
}
|
В диалоговата кутия ще се визуализира сумата 137.25, като валутата ще бъде съответно в лева, долари и евро:
Списък на културите – пример
Следният код реализира визуализиране на всички вградени в .NET Framework култури:
using System;
using System.Globalization;
public class ListAllCulturesDemo
{
public static void Main()
{
CultureInfo[] allCultures = CultureInfo.
GetCultures(CultureTypes.AllCultures);
foreach (CultureInfo ci in allCultures)
{
Console.Write("{0,-11}", ci.Name);
Console.Write(" {0,-4}", ci.TwoLetterISOLanguageName);
Console.Write(" {0,-4}",
ci.ThreeLetterWindowsLanguageName);
Console.WriteLine(" {0,-30}", ci.DisplayName);
}
}
}
| Извличане на списък от всички култури в .NET Framework – пример
Целта на следващия пример е да изведем списък от всички култури, поддържани от .NET Framework. Списъкът ще бъде съставен от няколко колонки - .NET идентификатор на култура, двубуквен ISO идентификатор, Windows идентификатор и текстово описание. Ето как изглежда сорс кода на примера:
using System;
using System.Globalization;
public class ListAllCulturesDemo
{
public static void Main()
{
Console.WriteLine("CULTURE ISO WIN DISPLAYNAME");
Console.WriteLine("------- --- --- -----------");
CultureInfo[] allCultures =
CultureInfo.GetCultures(CultureTypes.AllCultures);
foreach (CultureInfo ci in allCultures)
{
Console.Write("{0,-11}", ci.Name);
Console.Write(" {0,-4}", ci.TwoLetterISOLanguageName);
Console.Write(" {0,-4}",
ci.ThreeLetterWindowsLanguageName);
Console.WriteLine(" {0,-30}", ci.DisplayName);
}
}
}
|
Ето и извадка от получения резултат:
Сподели с приятели: |