2010-06-28 24 views
8

Tôi đang cố gắng để có được quốc gia của khách hàng của tôi, vì vậy tôi sử dụng CultureInfo.CurrentCulture. Vấn đề là khi khách hàng Canada của tôi sử dụng trang web của tôi, họ đang hiển thị là người Mỹ.CultureInfo.CurrentCulture đang cho tôi văn hóa sai

Có vẻ như CultureInfo.CurrentCulture đang trả lại quốc gia của máy chủ của tôi thay vì quốc gia của họ. Vậy làm cách nào để tôi có được quốc gia của khách hàng?

Trả lời

2

Tôi tin rằng bạn cần viết mã số đọc văn hóa của người dùng từ yêu cầu trình duyệt đến và đặt CultureInfo của bạn từ đó.

This fellow describes how they do it: Đặt văn bản hiển thị cho chuỗi hiện tại thành văn bản thích hợp nhất từ ​​đối tượng "yêu cầu" đến của người dùng.

Ông có một cuộc thảo luận tuyệt vời ở đó, nhưng điều này về cơ bản là như thế nào thì nó làm:

Trong Page_Load, họ thực hiện cuộc gọi này: UIUtilities.setCulture(Request);

đâu đây là những gì được gọi là:

/// Set the display culture for the current thread to the most 
/// appropriate culture from the user's incoming Http "request" object. 
internal static void setCulture(HttpRequest request) 
{ 
    if (request != null) 
    { 
     if (request.UserLanguages != null) 
     { 
     if (request.UserLanguages.Length > -1) 
     { 
      string cultureName = request.UserLanguages[0]; 
      UIUtilities.setCulture(cultureName); 
     } 
     } 
     // TODO: Set to a (system-wide, or possibly user-specified) default 
     // culture if the browser didn't give us any clues. 
    } 
} 

/// Set the display culture for the current thread to a particular named culture. 
/// <param name="cultureName">The name of the culture to be set 
/// for the thread</param> 
private static void setCulture(string cultureName) 
{ 
    Thread.CurrentThread.CurrentCulture = 
     CultureInfo.CreateSpecificCulture(cultureName); 
    Thread.CurrentThread.CurrentUICulture = new 
     CultureInfo(cultureName); 
} 
+0

Trên dòng bên phải, nhưng lưu ý rằng tiêu đề Chấp nhận ngôn ngữ được gửi bởi trình duyệt không nhất thiết phải là ngôn ngữ ưa thích của người dùng. Tôi đang ở châu Âu và xảy ra để có một phiên bản Windows của Mỹ, vì vậy IE8 của tôi gửi en-US. Cũng lưu ý rằng tên trong tiêu đề chấp nhận ngôn ngữ có thể không phải là tên văn hóa .NET hợp lệ, do đó, lệnh gọi đến CreateSpecificCulture phải được đính kèm trong thử/nắm bắt. – Joe

+0

không may mắn. Tôi vẫn nhận được en-us khi thử nghiệm – thchaver

+0

Bạn nhận được gì từ Request.UserLanguages? Tức là, bạn có chắc chắn ngôn ngữ mà trình duyệt của bạn đang yêu cầu không? – DOK

18

Bạn chỉ cần đặt thuộc tính culture thành auto trong tệp web.config của mình:

<system.web> 
    <globalization culture="auto" /> 
<system.web> 

Điều này sẽ tự động đặt CurrentCulture thành văn hóa của khách hàng.

Bạn cũng có thể đặt uiCulture thành auto nếu bạn đang sử dụng tài nguyên được bản địa hóa.

+1

tôi ước tôi có thể upvote điều này nhiều hơn một lần, cảm ơn. Đã cho tôi 3 giờ để làm việc này :) – Thousand

1

Trong trường hợp của tôi, máy của tôi ban đầu đã cài đặt tiếng Anh - Anh. Tôi đã thêm ngôn ngữ tiếng Anh - Hoa Kỳ và đặt ngôn ngữ đó làm mặc định. Tôi cũng xác minh rằng Hoa Kỳ đã được đặt chính xác trong sổ đăng ký. Đáng buồn thay, System.Threading.Thread.CurrentThread.CurrentCulture vẫn hiển thị văn hóa sai, Vương quốc Anh. Tôi phát hiện ra bạn cần phải thiết lập các tùy chọn ngôn ngữ. Tải xuống gói ngôn ngữ, chữ viết tay và lời nói.

Thậm chí khi đó văn hóa không chính xác. Vương quốc Anh sẽ xuất hiện trên tất cả các máy và sau khi tôi cài đặt gói ngôn ngữ Mỹ trình đơn bắt đầu đã hoàn toàn hạt. Tôi đã từ bỏ và cài đặt lại hệ điều hành bằng phiên bản tiếng Anh-Mỹ.

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