2009-12-10 13 views
6

Ngay bây giờ tôi đang làm:Có cách nào để biết liệu người dùng có thích chỉ số hoặc đế quốc mà không hỏi trong C# không?

bool UseMetricByDefault() { 
    return TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).TotalHours >= 0; 
} 

này hoạt động để phân biệt Mỹ từ châu Âu và châu Á, nhưng nó bỏ qua Nam Mỹ.

Có cách nào tốt hơn không?

+2

Tôi cũng sẽ bỏ qua tôi, nếu tôi đang ở quán cà phê internet ở Luân Đôn. Tôi sẽ đánh giá rất cao một tùy chọn để ghi đè lên dự đoán. –

+0

Tất nhiên sẽ có ghi đè. Do đó "ByDefault" trong tên hàm. –

+0

Hmm, có cài đặt 'Hệ thống đo' trong Tùy chọn Ngôn ngữ và Ngôn ngữ trong Pa-nen Điều khiển (phía sau nút Tùy chỉnh). Tôi tự hỏi bản đồ đó là gì trong .NET. –

Trả lời

20

Sử dụng các lớp RegionInfo trong System.Globalization namespace:

bool isMetric = RegionInfo.CurrentRegion.IsMetric; 

Nếu bạn muốn có một khu vực cụ thể, bạn có thể sử dụng một trong các cách sau:

// from a CultureInfo 
CultureInfo culture = ...; 
RegionInfo r = new RegionInfo(culture.Name); 

// from a string 
RegionInfo r = new RegionInfo("us"); 
+0

Tuyệt vời. Cảm ơn. –

2

Có vẻ như đã có triển khai trong System.Globalization.RegionInfo (regionInfo.IsMetric).

Bạn thể sử dụng CultureInfo class mà có thể trả lại Culture của hệ điều hành bạn đang chạy trên - thường ở định dạng en-USen-GBde-DE, vv văn hóa được thường xuyên hơn sử dụng cho các ứng dụng dịch từ một ngôn ngữ phụ thuộc khác về văn hóa của hệ điều hành.

Đây là tất cả để bản địa hóa được chỉ định - bạn có thể muốn đọc một số hướng dẫn và bài viết liên quan đến nó (ví dụ: here).

+0

Bạn không có nghĩa là lớp RegionInfo? CultureInfo nhận được điều này liên quan đến ngôn ngữ - RegionInfo có những thứ ngôn ngữ, đo lường và tiền tệ. –

+0

Vâng, vâng. Tôi đã để lại thông tin về 'CultureInfo' trong đó, có vẻ như tôi có thể làm với một break cho một nửa giờ hoặc lâu hơn ... –

3

phần của vấn đề là ngay cả khi bạn sử dụng RegionInfo của họ, không phải tất cả mọi người trong một khu vực đều sử dụng cùng một hệ thống. Ở Mỹ, các nhà khoa học thường sử dụng số liệu trong nghiên cứu của họ, và ở đây tại Canada, một chút hỗn hợp, vì chúng tôi nhận được rất nhiều bao bì thực phẩm từ Hoa Kỳ nhưng chúng tôi dạy con của chúng tôi về số liệu (nhưng chỉ từ gần đây - bố mẹ tôi vẫn nghĩ trong hoàng đế).

Điều đó đang được nói, bạn có thể dự đoán công bằng bằng cách sử dụng lớp RegionInfo.

+0

Một dự đoán công bằng là đủ tốt đối với tôi, nhưng cảm ơn cho tip. –

2

Đó là một tài sản trên lớp RegionInfo:

// en-US, en-GB, de-DE etc. 
string cultureName = CultureInfo.CurrentCulture.Name; 
RegionInfo regionInfo = new RegionInfo(cultureName); 
Console.WriteLine("You prefer to see {0}", regionInfo.IsMetric ? "metric" : "imperial"); 
0

Đối với một "đâm trong bóng tối" thông tin RegionInfo là đủ tốt.

Tuy nhiên ở những nơi thực hành như Vương quốc Anh có ngoại lệ. Ví dụ:

  • bất cứ điều gì liên quan đến giao thông là hoàng
  • nhiệt độ cho thời tiết được số liệu, nhưng một số người thích hoàng
  • đo của thiết bị là thước đo chủ yếu ...

Phần lớn phụ thuộc vào thế hệ bạn đang ở và thái độ của bạn thay đổi.

Vì vậy, trong thực tế - cung cấp cả hai, hãy đoán tại một mặc định hợp lý, nhưng nếu điều quan trọng là luôn cho phép người dùng ghi đè tùy chọn và đảm bảo những thay đổi này được ghi nhớ.

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