Câu trả lời:
Culture
ảnh hưởng đến cách dữ liệu phụ thuộc vào văn hóa (ngày, tiền tệ, số, v.v.) được trình bày. Đây là vài ví dụ:
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
Văn hóa cũng ảnh hưởng đến phân tích cú pháp đầu vào của người dùng theo cách tương tự:
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
Cảnh giác với những trường hợp phân tích cú pháp thành công nhưng kết quả không như bạn mong đợi.
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
ảnh hưởng đến tập tin tài nguyên nào (Tài nguyên. lang .resx) sẽ được tải vào ứng dụng của bạn.
Vì vậy, để tải tài nguyên tiếng Đức (có lẽ là văn bản được bản địa hóa), bạn sẽ đặt thành UICulture
văn hóa Đức và hiển thị định dạng tiếng Đức (không có bất kỳ tác động nào đến tài nguyên nào được tải) mà bạn sẽ đặt Culture
.
CultureInfo
đối tượng chỉ để xác định tệp tài nguyên trong đó một string
là đủ? (Ví dụ: Language
tài sản của FrameworkElement
)
Culture and UICulture
Giá trị là các cặp chuỗi hai chữ cái, đầu tiên là để xác định ngôn ngữ và thứ hai để xác định vùng. Thí dụ:
en-GB
ở đây en
đại diện English
và GB
đại diệnGreat Briton
en-US
ở đây en
đại diện English
và US
đại diệnUnited States
Sử dụng Culture
cho các chức năng phụ thuộc vào Văn hóa như ngày, giờ. và UICulture
là để tải tập tin tài nguyên chính xác.
Chỉ cần xem xét một vấn đề nhỏ ngoài lời giải thích tuyệt vời của @ Vache: Bạn có thể đặt cả UICARM và Văn hóa ở (cấp độ trang và cấp ứng dụng).
Để đặt chúng ở cấp ứng dụng, chỉ cần thêm phiên toàn cầu hóa trong web.config
ví dụ <globalization uiCulture="es" culture="es-MX" />
Và để đặt chúng ở cấp độ trang, rất tốt để thêm vào một trang (cá nhân) cụ thể, hãy đặt các thuộc tính Văn hóa và UICARM trong chỉ thị @ page
ví dụ <%@ Page UICulture="es" Culture="es-MX" %>
Thuộc tính UICARM có thể thay đổi cho từng trình duyệt Web, trong khi Văn hóa không đổi.
Giá trị Văn hóa chỉ có thể được đặt thành các nền văn hóa cụ thể, chẳng hạn như en-US hoặc en-GB. Điều này ngăn yêu cầu xác định ký hiệu tiền tệ chính xác để sử dụng cho en, trong đó en-US và en-GB có các ký hiệu tiền tệ khác nhau. Người dùng có thể thiết lập văn hóa và văn hóa UI trong trình duyệt của họ.