2012-02-23 10 views

Respuesta

45

Request.UserLanguages es la propiedad que está buscando. Solo tenga en cuenta que esta matriz puede contener idiomas arbitrarios (incluso no exsitentes) configurados por encabezados de solicitud.

ACTUALIZACIÓN

Ejemplo:

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

¿Qué tipos de valores que hace estas cabeceras contienen normalmente? Sería genial trabajar con ejemplos. –

+3

Cita: 'Normalmente, estos consisten en un código de dos caracteres para el idioma, un guión y un código de dos caracteres para la cultura, como" en-us "para inglés estadounidense y" fr-ca "para francés canadiense. '. Entonces es una matriz 'string []' que contiene valores como esos. –

+0

Agregó un ejemplo. –

6

Se puede utilizar código similar al siguiente para obtener diversos detalles de su usuario (incluidos los idiomas):

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

estoy marcando esta pregunta para mí con una estrella y compartir aquí un código que esencialmente convierte el Request.UserLanguages en una matriz de CultureInfo en posturas para su uso posterior en su aplicación. También es más flexible trabajar con CultureInfo que solo con los códigos ISO, porque con CultureInfo puede acceder a todas las propiedades de una cultura (como Nombre, Nombre de idioma de dos caracteres, Nombre nativo, ...):

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

esto obtiene cultura actual del servidor, no del navegador del cliente –

Cuestiones relacionadas