Culture
влияет на представление данных, зависящих от культуры (даты, валюты, числа и т. Д.).Вот несколько примеров:
var date = new DateTime(2000, 1, 2);
var number = 12345.6789;
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
Console.WriteLine(date); // 02.01.2000 00:00:00
Console.WriteLine(number.ToString("C")); // 12.345,68 €
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-CA");
Console.WriteLine(date); // 2000-01-02 00:00:00
Console.WriteLine(number.ToString("C")); // 12 345,68 $
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Console.WriteLine(date); // 1/2/2000 12:00:00 AM
Console.WriteLine(number.ToString("C")); // $12,345.68
Культура также влияет на синтаксический анализ пользовательского ввода таким же образом:
const string numberString = "12.345,68";
decimal money;
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
money = decimal.Parse(numberString); // OK!
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
money = decimal.Parse(numberString); // FormatException is thrown, TryParse would return false
Остерегайтесь случаев, когда синтаксический анализ завершается успешно , норезультат не тот, который вы ожидаете получить.
const string numberString = "12.345";
decimal money;
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
money = decimal.Parse(numberString); // 12345
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
money = decimal.Parse(numberString); // 12.345, where the . is a decimal point
UICulture
влияет на то, какой файл ресурсов (Resources. lang .resx) будет загружен вашим приложением.
Таким образом, чтобы загрузить немецкие ресурсы (предположительно локализованный текст), вы должны установить UICulture
для немецкой культуры, а для отображения немецкого форматирования (без какого-либо влияния на то, какие ресурсы загружены) вы должны установить Culture
.