Páginas

viernes, 1 de junio de 2018

Saber el idioma de instalación de Windows desde VB.Net

Microsoft Windows  Antes que nada una disculpa por no escribir últimamente, he andado ocupado con algo de trabajo, pero aquí estamos de regreso. En esta ocasión quiero mostrar como saber en que idioma se encuentra instalado nuestro Windows usando VB.Net


Publicidad


  Usando VB.Net tenemos una manera muy sencilla de saberlo, para ello solo hay que recurrir a la instrucción:

Try
   culture = Thread.CurrentThread.CurrentCulture.Name.Trim
Catch exp As Exception
   culture = "en-us"
End Try

  Así de simple, ya en la variable culture tenemos las iniciales del lenguaje de Windows, sin embargo en el trabajo tenemos una máquina con Windows instalado, pero en el idioma inglés y esta función retornaba la cadena es-ES, por lo que provocaba resultados incorrectos.

  Así que decidí investigar un poco más del tema: resulta que Windows mantiene en el registro una llave que especifica el idioma, lo que hace que sea más confiable que la rutina antes mencionada.

 '#### Purpose: Return user culture language
 '#### Created date: 19/02/2015
 '#### Created by username: Juan Manuel Mar Hdz.
 '#### Last modified date: 16/04/2018
 '#### Last modified username: Juan Manuel Mar Hdz.
 '#### Thanks to https://www.howtogeek.com/forum/topic/change-display-language-using-regedit-in-windows-7
  Public Function getLanguage() As String
 
  Dim culture As String, subkeys() As String
  Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine
 
  key = key.OpenSubKey("SYSTEM\CurrentControlSet\Control\MUI\UILanguages")
 
  If key IsNot Nothing Then
 
  If key.SubKeyCount > 0 Then
 
  Try
 
  subkeys = key.GetSubKeyNames
  culture = subkeys(0).Trim
 
  Catch exp As Exception
  culture = ""
  End Try
 
  Else
 
  Try
  culture = Thread.CurrentThread.CurrentCulture.Name.Trim
  Catch exp As Exception
  culture = "en-us"
  End Try
 
  End If
 
  Else
 
  Try
  culture = Thread.CurrentThread.CurrentCulture.Name.Trim
  Catch exp As Exception
  culture = "en-us"
  End Try
 
  End If
 
  If culture.IsNullOrEmpty(culture) = True Then
  Return "en-us"
  Else
  Return culture.Trim
  End If
 
  End Function

  Lo anterior es la rutina mejorada. Como podemos ver lo que se hace es extraer el contenido de la llave SYSTEM\CurrentControlSet\Control\MUI\UILanguages, si hay un valor retornaremos el lenguaje de instalación, si falla el procedimiento entonces haremos uso de la función nativa de VB.Net; y en caso de cualquier error retornaremos un lenguaje predeterminado (en-US).

Procedencia de las imágenes:
File: Caja de instalación de Microsoft Windows
URL: http://mlm-s2-p.mlstatic.com/sistemas-operativos-software-juegos-pc-339801-MLM20437678808_102015-S.jpg
Licencia: Creative Commons

¿Te gustó este post?, entonces si lo deseas puedes apoyarnos para continuar con nuestra labor, gracias.

2 comentarios:

  1. En realidad es bastante más sencillo de obtener, porque Windows nos proporciona la función GetSystemDefaultUILanguage que utilizo por ejemplo en el motor de traducción de FileOptimizer (clsLanguage.cpp).

    Lo explicaba un poco en general en Cómo se hizo FileOptimizer en español.

    En general usar el registro de Windows es algo poco eficiente, y que puede cambiar de una versión de Windows a otra, y entonces toda tu infraestructura deje de funcionar. Por contra, las funciones de la API, son siempre binariamente compatibles, y si aparece una que no lo sea, la vieja seguirá siendo retrocompatible.

    ResponderBorrar