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