2008-11-30 68 views
304

Trong .NET có lớp CultureInfo trong không gian tên System.Globalization. Nó có hai thuộc tính giống nhau cả hai giá trị trả lại của loại CultureInfo: CurrentCultureCurrentUICulture.Sự khác nhau giữa các thuộc tính CurrentCulture và CurrentUICulture của CultureInfo trong .NET là gì?

Sự khác nhau giữa chúng là gì?

Tôi nên sử dụng cái nào và tại sao?

+25

Ghi nhớ rằng Microsoft, theo sự khôn ngoan của họ, không tách riêng nền văn hóa giao diện người dùng của tiếng Anh Mỹ và tiếng Anh (Anh) hoặc các tiếng Anh khác. Không có MUI cho tiếng Anh, có nghĩa là 'CurrentUICulture' sẽ luôn luôn là en-US trên một máy tiếng Anh, bất kể' CurrentCulture', có thể được thiết lập để bản địa hóa các thiết lập khu vực. – nicodemus13

+9

Có. Tôi đang ở Anh và tìm thấy 'CurrentCulture' là 'en-GB', nhưng' CurrentUICulture' là 'en-US'. –

Trả lời

297

CurrentCulture là đại diện .NET của ngôn ngữ người dùng mặc định của hệ thống. Điều này kiểm soát định dạng ngày và số mặc định và tương tự.

CurrentUICulture đề cập đến ngôn ngữ giao diện người dùng mặc định, cài đặt được giới thiệu trong Windows 2000. Đây là phần chủ yếu liên quan đến phần bản địa hóa/biên dịch giao diện người dùng của ứng dụng của bạn.

Bất kỳ tùy chọn vùng nào mà hệ thống được định cấu hình để có sẽ là giá trị "Hiện tại" trong ứng dụng .NET của bạn.

Thông thường, chúng đều giống nhau. Nhưng trên hệ thống của tôi, chúng sẽ khác: Tôi thích số và ngày tháng theo định dạng Đức, vì vậy CurrentCulture sẽ là tiếng Đức, nhưng tôi cũng thích tất cả các ứng dụng của tôi bằng tiếng Anh, vì vậy CurrentUICulture sẽ là tiếng Anh.

Có một bài viết tốt đẹp về chủ đề này: Sorting it all Out: Why we have both CurrentCulture and CurrentUICulture

+4

Thực ra đây có thể là giải pháp thay thế tốt cho giải thích chi tiết: http://forums.asp.net/post/1080435.aspx – Michael12345

+0

@ Michael12345 Cảm ơn gợi ý. Tôi đã cập nhật liên kết. Bài viết bạn liên kết đến là tốt là tốt, thậm chí có thể tốt hơn. – Tomalak

+2

Đó là những tên khủng khiếp, sau đó, vì CurrentUICulture thực sự có nghĩa là CurrentLanguageCulture và CurrentCulture thực sự có nghĩa là CurrentDataCulture. – Pxtl

97

Đây là một thủ thuật đơn giản tôi sử dụng để nhớ cái nào để sử dụng:

(date, currency, double).tostring = CurrentCulture 

resource.fr-CA.resx file = currentUICulture 
2

Sự khác biệt:

  1. CurrentCulture là để định dạng ngày và đơn vị tiền tệ trong khi CurrentUICulture đi kèm với ngôn ngữ/bản dịch. Nó sẽ được sử dụng bởi ResourceManager để tra cứu tài nguyên theo văn hóa.
  2. Không gian tên của CurrentCulture lớp học là System.Globalization trong khi CurrentUICulture xuất phát từ System.Threading.
  3. CurrentCulture được duy trì trong các yêu cầu khác nhau trong phiên trong khi CurrentUICulture cần được đặt cùng với mọi yêu cầu.

chân dung:

Cả hai đều là System.Globalization.CultureInfo trường.

8

Một cách tốt để tạo sự khác biệt, thêm vào những lời giải thích thoải mái thực hiện bằng cách sử dụng đồng, và một khía cạnh quan trọng trong việc phát triển ứng dụng web như sau:

  • CurrentCulture đại diện cho thiết lập của máy chủ web. Ví dụ: nếu ứng dụng web ASP.NET của bạn được lưu trữ ở Đức, giá trị của CutlureInfo.CurrentCulture rất có thể là de-DE. Do đó, định dạng .ToString() mặc định cho các loại IFormattable sẽ sử dụng định dạng mặc định của Đức hoặc các định dạng đã được thiết lập trên hệ điều hành máy chủ làm mặc định.

  • CurrentUICulture có thể được chụp từ tác nhân người dùng và có thể đại diện cho văn hóa giao diện người dùng của khách hàng kết nối với trang web. Ví dụ: nếu bạn tải trang web đó từ Nga, cài đặt cục bộ của bạn được đặt để sử dụng tiếng Nga và tác nhân người dùng gửi cài đặt ngôn ngữ của bạn tới máy chủ (Opera và IE tự động thực hiện việc này, không chắc chắn cho Chrome và FireFox), CurrenUICulture sẽ đại diện cho ru-RU. Điều này sẽ gây ra bất kỳ tài nguyên nào như các chuỗi được bản địa hóa được truy xuất thông qua ResourceManager hoặc các biểu thức bản địa hoá trong các tệp aspx/ascx của ASP.NET bằng tiếng Nga (nếu có sẵn bản dịch).

3

Điều đáng chú ý là các CurrentUICulture hỗ trợ miền địa phương cụ thể phi nước như 'en' (nền văn hóa Neutral) trong khi CurrentCulture CHỈ hỗ trợ miền địa phương quốc gia cụ thể như 'en-GB'. Đặt CurrentCulture thành văn hóa trung tính sẽ ném một số ArgumentException.

Tôi cho rằng điều này là do các định dạng như ngày và đơn vị tiền tệ được liên kết chặt chẽ hơn với chính quốc gia, nhưng ngôn ngữ được hiển thị thường có thể thay đổi giữa các quốc gia.

Các vấn đề liên quan