Ответы:
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
.
CultureInfo
объекта только для определения файла ресурсов, где string
будет достаточно? (Например, Language
собственность FrameworkElement
)
Culture and UICulture
Значения представляют собой пары двухбуквенных строк, первая предназначена для определения языка, а вторая - для определения региона. Пример:
en-GB
здесь en
представляет English
и GB
представляетGreat Briton
en-US
здесь en
представляет English
и US
представляетUnited States
Используйте Culture
для функций, зависящих от языка и региональных параметров, таких как дата, время. и UICulture
предназначен для правильной загрузки файла ресурсов.
Это небольшой вопрос, который следует рассмотреть в дополнение к удивительному объяснению @ Vache: вы можете установить UICulture и Culture на (уровне страницы и уровне приложения).
Чтобы установить их на уровне приложения, просто добавьте сеанс глобализации в web.config
например <globalization uiCulture="es" culture="es-MX" />
А чтобы установить их на уровне страницы, что хорошо для конкретной (отдельной) страницы, установите атрибуты Culture и UICulture в директиве @ page.
например <%@ Page UICulture="es" Culture="es-MX" %>
Свойство UICulture может изменяться для каждого веб-браузера, тогда как культура остается неизменной.
Значение культуры можно установить только для определенных культур, например en-US или en-GB. Это препятствует требованию определять правильный символ валюты для использования в en, где en-US и en-GB имеют разные символы валюты. Пользователи могут установить культуру и культуру пользовательского интерфейса в своих браузерах.