Sự khác biệt giữa các thuộc tính Hiện tại và Văn hóa Hiện tại của CultureInfo trong .NET là gì?


359

Trong .NET có CultureInfolớp trong System.Globalizationkhông gian tên. Nó có hai thuộc tính tương tự cả hai giá trị trả về của CultureInfoloại: CurrentCultureCurrentUICulture.

sự khác biệt giữa chúng là gì?

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


28
Hãy nhớ rằng Microsoft, theo trí tuệ của họ, không tách rời văn hóa UI của tiếng Anh Mỹ và tiếng Anh (Anh) hoặc tiếng Anh khác. Không có MUI cho tiếng Anh, có nghĩa là CurrentUICulturesẽ luôn là en-US trên một máy tiếng Anh, bất kể CurrentCulture, có thể được đặt để bản địa hóa Cài đặt khu vực.
nicodemus13

11
Đúng. Tôi đang ở Vương quốc Anh và tìm thấy CurrentCulturelà 'en-GB', nhưng CurrentUICulturelà 'en-US'.
Đại tá Panic

Chỉ cần tìm thấy bài viết này giải thích điều này một cách chi tiết: github.com/jbe2277/waf/wiki/CurrentCulture-vs.-CurrentUICulture
RinoTom

Câu trả lời:


347

CurrentCulturelà đạ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 số và ngày mặc định và tương tự.

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

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

Thường thì cả hai đề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 của tôi ở định dạng tiếng Đức, vì vậy CurrentCulturesẽ là tiếng Đức, nhưng tôi cũng thích tất cả các ứng dụng của mình bằng tiếng Anh, vì vậy CurrentUICulturesẽ là tiếng Anh.

Có một bài viết rất hay về chủ đề: Sắp xếp tất cả ra: Tại sao chúng ta có cả Hiện tại và Hiện tại


5
Trên thực tế, đây có thể là một giải pháp thay thế tốt cho giải thích chuyên sâu: forum.asp.net/post/1080435.aspx
Michael12345

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

5
Đó là những cái tên khủng khiếp, vì vậy, vì CurrentUICARM thực sự có nghĩa là CurrentL LanguageCARM và CurrentCARM thực sự có nghĩa là CurrentDataCARM.
Pxtl

2
@Pxtl: Tôi sẽ chọn cho CurrentFormattedCARM thay vì CurrentDataCARM . Tuy nhiên, lưu ý rằng những điều này có thể không rõ ràng như thậm chí tên của bạn đề nghị. Chẳng hạn, tôi cho rằng định dạng ngày dài ( D) có thể chứa khá nhiều "ngôn ngữ": en-UStrả về "Thứ Sáu, ngày 6 tháng 4 năm 2018", trong khi ru-RUtrả về "6 апреля 2018 г.".
HOẶC Mapper

107

Đây là một mẹo đơn giản tôi sử dụng để ghi nhớ nên sử dụng cái nào:

(date, currency, double).tostring = CurrentCulture

resource.fr-CA.resx file = currentUICulture

Nếu các bình luận của nicodemus13Đại tá Panic đáng tin cậy, có vẻ như phần thứ hai trong trò lừa của bạn không nên hoạt động.
HOẶC Mapper

15

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

  • CurrentCultuređại diện cho việc thiết lập 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.CurrentCulturerất có thể sẽ là de-DE. Do đó, định .ToString()dạng mặc định cho IFormattablecác loại sẽ sử dụng các định dạng mặc định của Đức hoặc các định dạng đã được thiết lập trên HĐH máy chủ làm mặc định.

  • CurrentUICulturecó 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 ngôn ngữ tiếng Nga và tác nhân người dùng của bạn sẽ gửi cài đặt ngôn ngữ của bạn đến máy chủ (Opera và IE thực hiện điều này một cách tự động, không chắc chắn cho Chrome và FireFox), CurrenUICulturesẽ đại diện ru-RU. Điều này sẽ khiến 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 hóa trong các tệp ASP.NET aspx / ascx đều bằng tiếng Nga (nếu có bản dịch).


13

Sự khác biệt:

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

Độ thích:

Cả hai đều là System.Globalization.CultureInfotrường hợp.


8

Điều đáng chú ý là các CurrentUICulturehỗ trợ các địa phương không thuộc quốc gia cụ thể như 'en' (văn hóa trung lập) trong khi CurrentCultureCHỈ hỗ trợ các địa phương cụ thể theo quốc gia như 'en-GB'. Thiết lập CurrentCulturemột nền văn hóa trung lập sẽ ném một ArgumentException.

Tôi cho rằng điều này là do các định dạng như ngày tháng 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 thế cho nhau giữa các quốc gia.

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.