В чем разница между культурой и культурой? - PullRequest
118 голосов
/ 01 марта 2012

Может ли кто-нибудь дать мне немного больше информации о разнице между Culture и UICulture в .NET Framework? Что они делают и когда что использовать?

Ответы [ 4 ]

140 голосов
/ 01 марта 2012

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.

1 голос
/ 06 сентября 2017

Culture and UICulture

Значения - это пары двухбуквенных строк, первая - для определения языка, а вторая - для определения региона. Пример:

en-GB здесь en представляет English, а GB представляет Great Briton

en-US здесь en представляет English, а US представляет United States

Используйте Culture для зависящих от культуры функций, таких как дата, время. и UICulture для правильной загрузки файла ресурсов.

0 голосов
/ 29 мая 2016

Еще один маленький вопрос, который нужно рассмотреть в дополнение к потрясающему объяснению @ Vache: Вы можете установить как UICulture, так и Культуру на (уровень страницы и уровень приложения).

Чтобы установить их на уровне приложения, просто добавьте сеанс глобализации в web.config

например. <globalization uiCulture="es" culture="es-MX" />

И чтобы установить их на уровне страницы, который удобно добавлять на определенную (отдельную) страницу, установите атрибуты Culture и UICulture в директиве @ page

например. <%@ Page UICulture="es" Culture="es-MX" %>

0 голосов
/ 07 августа 2015

Свойство UICulture может изменяться для каждого веб-браузера, в то время как культура остается постоянной.

Значение культуры может быть установлено только для определенных культур, таких как en-US или en-GB.Это исключает необходимость определения правильного символа валюты для использования в en, где en-US и en-GB имеют разные символы валюты.Пользователи могут устанавливать культуру пользовательского интерфейса в своих браузерах.

...