2012-02-23 38 views

回答

45

Request.UserLanguages是你正在寻找的财产。请记住,该数组可能包含由请求标头设置的任意(甚至非外部)语言。

UPDATE

例子:

// 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

什么类型的值不会这些头通常含有?例子将是很好的工作。 – 2012-02-23 13:41:36

+3

Quote:'通常这些由两个字符的代码为文化,如美国英语的“en-us”和加拿大法语的“fr-ca”的语言,连​​字符和双字符代码。 '。所以它是一个包含这些值的'string []'数组。 – 2012-02-23 13:44:19

+0

添加了一个示例。 – 2012-02-23 13:50:16

6

您可以使用类似于下面的代码从您的用户(包括语言)得到各种细节:

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

我打标这个问题与自己一个明星,并在这里分享一些代码,本质上将Request.UserLanguages变成一个CultureInfo数组以便在您的应用程序中进一步使用。这也更加灵活与CultureInfo的工作不仅仅是ISO代码,因为CultureInfo的您可以访问一个文化的所有属性(如名称,两个字符的语言名称,本地名称,...):

 // 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

这从服务器而不是客户端浏览器获取当前文化 – 2015-03-01 08:40:54