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
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.
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).
ResponderBorrarLo 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.
Gracias, le daré un vistazo.
Borrar