Sự khác biệt giữa Văn hóa và UICARM là gì?


126

Ai đó có thể cho tôi thêm một chút thông tin về sự khác biệt giữa CultureUICulturetrong khung .NET không? Họ làm gì và khi nào nên dùng gì?

Câu trả lời:


148

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 UICulturevă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.


39
Điều đó có nghĩa là bạn có thể có nhãn tiếng Anh và giao diện người dùng (tiếng Anh UICARM) và tiền tệ Na Uy, ngày, giờ và định dạng số (Văn hóa Na Uy.) Trong thuật ngữ Windows, hãy nghĩ rằng nó có cài đặt gói ngôn ngữ cho các menu và hộp thoại (UICARM), nhưng chạy với các thiết lập khu vực Na Uy (Văn hóa.)
Lasse V. Karlsen

2
Để nhấn mạnh ý nghĩa của việc này: Ngay cả khi bạn không hỗ trợ ngôn ngữ của người dùng, hãy đảm bảo bạn hỗ trợ văn hóa của họ, để định dạng! Tôi đã thấy những lỗi mà ứng dụng rơi trở lại "en-US" cả về văn hóa và ngôn ngữ, khi nó chỉ cần dự phòng cho ngôn ngữ.
ToolmakerSteve

1
Điểm nào trong việc sử dụng toàn bộ một CultureInfođối tượng chỉ để xác định tệp tài nguyên trong đó một stringlà đủ? (Ví dụ: Languagetài sản của FrameworkElement)
Wouter

2

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 EnglishGBđại diệnGreat Briton

en-USở đây enđại diện EnglishUSđại diệnUnited States

Sử dụng Culturecho các chức năng phụ thuộc vào Văn hóa như ngày, giờ. và UICulturelà để tải tập tin tài nguyên chính xác.


0

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" %>


-4

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ọ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.