Чим відрізняється Культура від ЄДКкультури?


126

Чи може хтось дати мені трохи більше інформації про різницю між Cultureта UICultureв рамках .NET? Що вони роблять і коли використовувати?

Відповіді:


148

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.


39
Що означає, що у вас можуть бути англійські мітки та інтерфейс користувача (англ. UICulture) та норвезька валюта, дата, час та форматування чисел (культура Норвегії). У Windows-термінах вважайте, що встановлений мовний пакет для меню та діалогових вікон (UICulture), але працює з норвезькими регіональними настройками (Культура.)
Лассе В. Карлсен

2
Щоб підкреслити наслідки цього: Навіть якщо ви не підтримуєте мову користувача, переконайтеся, що ви підтримуєте їх культуру, для форматування! Я бачив помилки, коли додаток повертається до "en-US" як для культури, так і для мови, коли йому потрібно було лише відмовитись від мови.
ToolmakerSteve

1
Який сенс у використанні цілого CultureInfoоб’єкта просто для визначення файлу ресурсу, де а stringбуде достатньо? (Наприклад, Languageвласність FrameworkElement)
Wouter

2

Culture and UICulture

Значення - це пари двобуквенних рядків, перша - для визначення мови, а друга - для визначення регіону. Приклад:

en-GBтут enпредставляє Englishі GBпредставляєGreat Briton

en-USтут enпредставляє EnglishіUSпредставляєUnited States

Використовуйте Cultureдля залежних від культури функцій, таких як дата, час. і UICultureпризначено для правильного завантаження файлу ресурсів.


0

Лише невелика справа, яку слід врахувати на додаток до дивовижного пояснення @ Vache: Ви можете встановити як UICulture, так і культуру на рівні сторінки та на рівні програми.

Щоб встановити їх на рівні програми, просто додайте сеанс глобалізації в web.config

напр <globalization uiCulture="es" culture="es-MX" />

І щоб встановити їх на рівні сторінки, що добре додати на конкретній (індивідуальній) сторінці, встановіть атрибути культури та UICulture в директиві @ page

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


-4

Властивість UICulture може змінюватися для кожного веб-переглядача, тоді як культура залишається постійною.

Значення «Культура» можна встановити лише для певних культур, наприклад, en-US або en-GB. Це запобігає вимозі ідентифікувати правильний символ валюти, який слід використовувати для en, де en-US та en-GB мають різні символи валюти. Користувачі можуть встановлювати культуру та культуру інтерфейсу користувача у своїх браузерах.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.