Может ли кто-нибудь дать мне немного больше информации о разнице между .NET framework Culture
и UICulture
внутри нее? Что они делают и когда что использовать?
126
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 имеют разные символы валюты. Пользователи могут установить культуру и культуру пользовательского интерфейса в своих браузерах.
источник