2012-02-23 27 views
21

Làm thế nào tôi có thể (trong ASP .NET MVC) nhận được CultureInfo của khách truy cập hiện tại (dựa trên ngôn ngữ trình duyệt của họ)?Nhận CultureInfo từ khách truy cập hiện tại và tài nguyên cài đặt dựa trên đó?

Tôi không biết bắt đầu từ đâu. Tôi đã thử xem xét tiêu đề "Accept-Languages" được gửi bởi trình duyệt. Nhưng đó là cách tốt nhất để làm điều đó?

Trả lời

45

Request.UserLanguages là thuộc tính bạn đang tìm kiếm. Chỉ cần nhớ rằng mảng này có thể chứa các ngôn ngữ tùy ý (thậm chí không phải là exsitent) như được thiết lập bởi các tiêu đề yêu cầu.

CẬP NHẬT

Ví dụ:

// Get Browser languages. 
var userLanguages = Request.UserLanguages; 
CultureInfo ci; 
if (userLanguages.Count() > 0) 
{ 
    try 
    { 
     ci = new CultureInfo(userLanguages[0]); 
    } 
    catch(CultureNotFoundException) 
    { 
     ci = CultureInfo.InvariantCulture; 
    } 
} 
else 
{ 
    ci = CultureInfo.InvariantCulture; 
} 
// Here CultureInfo should already be set to either user's prefereable language 
// or to InvariantCulture if user transmitted invalid culture ID 
+0

những loại giá trị không những tiêu đề thường chứa? Ví dụ sẽ tuyệt vời để làm việc cùng. –

+3

Trích dẫn: “Thông thường, các mã này bao gồm mã gồm hai ký tự cho ngôn ngữ, dấu gạch ngang và mã gồm hai ký tự cho văn hóa, chẳng hạn như" en-us "cho tiếng Anh Mỹ và" fr-ca "cho tiếng Pháp của Canada. '. Vì vậy, nó là một mảng 'string []' chứa các giá trị như vậy. –

+0

Đã thêm ví dụ. –

6

Bạn có thể sử dụng mã tương tự như sau để có được thông tin chi tiết khác nhau từ người dùng của bạn (bao gồm cả ngôn ngữ):

MembershipUser user = Membership.GetUser(model.UserName); 
string browser = HttpContext.Request.Browser.Browser; 
string version = HttpContext.Request.Browser.Version; 
string type = HttpContext.Request.Browser.Type; 
string platform = HttpContext.Request.Browser.Platform; 
string userAgent = HttpContext.Request.UserAgent; 
string[] userLang = HttpContext.Request.UserLanguages 
4

Tôi đánh dấu câu hỏi này cho bản thân mình với một ngôi sao và chia sẻ ở đây một số mã về cơ bản biến Request.UserLanguages thành một mảng của CultureInfo trong lập trường để sử dụng thêm trong ứng dụng của bạn. Nó cũng linh hoạt hơn khi làm việc với CultureInfo hơn là mã ISO, bởi vì với CultureInfo bạn có quyền truy cập vào tất cả các thuộc tính của một nền văn hóa (như Tên, Hai ký tự, Tên bản địa, ...):

 // Create array of CultureInfo objects 
     string locale = string.Empty; 
     CultureInfo[] cultures = new CultureInfo[Request.UserLanguages.Length + 1]; 
     for (int ctr = Request.UserLanguages.GetLowerBound(0); ctr <= Request.UserLanguages.GetUpperBound(0); 
       ctr++) 
     { 
      locale = Request.UserLanguages[ctr]; 
      if (!string.IsNullOrEmpty(locale)) 
      { 

       // Remove quality specifier, if present. 
       if (locale.Contains(";")) 
        locale = locale.Substring(0, locale.IndexOf(';')); 
       try 
       { 
        cultures[ctr] = new CultureInfo(locale, false); 
       } 
       catch (Exception) { continue; } 
      } 
      else 
      { 
       cultures[ctr] = CultureInfo.CurrentCulture; 
      } 
     } 
     cultures[Request.UserLanguages.Length] = CultureInfo.InvariantCulture; 

HTH

-3

var userLanguage = CultureInfo.CurrentUICulture;

+7

điều này nhận văn hóa hiện tại từ trình duyệt của máy chủ không phải của khách hàng –

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