Obtener la cultura del cliente… CurrentCulture/CurrentUICulture

Preguntaron en los grupos de noticias de asp.net, como obtener la cultura del browser del cliente.
(y como tenia en el tintero/borrador este articulo.. complete con algunos enlaces.. y a publicarlo)

El primer ejemplo:   

CultureInfo.CurrentCulture.Name()

Nos devuelve la cultura actual del proceso (Thread) actual, pero no del navegador del cliente.

Posible y «tentativa» solución

Una solución de ejemplo podría ser leyendo la propiedad UserLanguages del Request:

Private Function ObtenerCultura() As String
    Dim culInfo As System.Globalization.CultureInfo
    culInfo = System.Globalization.CultureInfo.CreateSpecificCulture(HttpContext.Current.Request.UserLanguages(0))
    Return culInfo.ToString
End Function

Como la propiedad UserLanguages devuelve un arreglo de idiomas (cadena de caracteres) del cliente.. seleccionamos el primer item, y armamos nuestra cultura

Luego tendríamos que asignarla si queremos que sea la cultura por defecto para por ejemplo manipular fechas, presentar recursos.
En el ejemplo anterior habría que agregar esta línea:

Thread.CurrentThread.CurrentCulture = culInfo

Aquí como se dice, estamos «explicitando» la cultura a utilizar en base al lenguaje del cliente (que leímos del browser)

 

Solución en NET 2.0

Hace un par de meses nos comentaba esto José M. Alarcón en un articulo:
  – Cambio automático de cultura en ASP.NET 2.0 (by José M. Alarcón)

Como y donde podemos cambiar?

    1. Por Pagina
      image
      Pero podemos hacer que sea automático que capture el valor del cliente
       image
    2. Toda la aplicación: 
      Donde si no es en el web.config…
      image
      O automáticamente…
      image
    3. Por código… como ya lo implementamos en el ejemplo mas arriba

 

 

 

Como lo probamos?

En el IE7 tenemos la posibilidad de cambiar el idioma de preferencia….
Tools >> Internet Options >> General >> Button Languages

image

 

Si ahora navegamos por el sitio podemos obtener, mediante el código detallado mas arriba:

  • CultureInfo.CurrentCulture.Name(): es-AR
  • ObtenerCultura(): fr-FR

 

 

 

Por si queda algo en el tintero… CurrentCulture/CurrentUICulture ??

(from MSDN…)

CurrentCulture:

La propiedad CultureInfo.CurrentCulture es una configuración de cada subproceso que determina los formatos predeterminados para la fecha, hora, moneda y números, el criterio de ordenación de texto, las comparaciones de cadenas y la distinción entre mayúsculas y minúsculas. La propiedad CurrentCulture no es una configuración de idioma. Sólo contiene datos relacionados con la configuración estándar para una región geográfica.
Nota: Aquí la palabra clave seria Internacionalización, donde se puede visualizar un dato sensible (por ejemplo la fecha) en forma correcta dependiendo de la cultura.

CurrentUICulture:

La propiedad CultureInfo.CurrentUICulture es una configuración para cada subproceso que devuelve la referencia cultural de la interfaz de usuario actual. La clase ResourceManager utiliza esta propiedad para buscar recursos específicos de la referencia cultural en tiempo de ejecución.
Nota: La palabra clave aquí es la Localización de los recursos

Casi siempre debería ser igual ambas, pero hay momentos que no poseemos por ejemplo al paquete de idioma (Language Pack) de NET 2.0 (que es un paquete de localización para el idioma español por ejemplo)

Y allí la UI no queda con el idioma para por ejemplo traducir los mensajes de algunos webcontrol que definimos, porque «físicamente» no esta instalado.

 

No queda muy claro? y no… aquí un muy buenos articulo de  

 

 

Enlaces

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *