2011-12-21 26 views
12

¿Cómo puedo saber el idioma actual del usuario en un programa ?Buscar el idioma actual del usuario

Necesito esto para mostrar un formulario en un idioma apropiado.

+0

@brettdj Creo que el más genérico 'excel' es siempre una etiqueta útil, así, ya que hace más fácil las búsquedas futuras. – Fionnuala

Respuesta

13

Mi código inicial (la utilización de este vbforum code) supone que Windows y Excel comparten un lenguaje común - probable, pero no a prueba de balas.

actualizado

El código revisado:

  1. Devuelve el identificador de configuración regional (LCID).
  2. Busca el LCID desde este msft link.
  3. Analiza el LCID utilizando un para obtener el idioma.

Salida de ejemplo en mi máquina por debajo de

El código le permitirá al usuario saber si hay errores en el acceso al sitio web de LCID, o al analizar el nombre del país.

enter image description here

Sub GetXlLang() 
     Dim lngCode As Long 
     lngCode = Application.LanguageSettings.LanguageID(msoLanguageIDUI) 
     MsgBox "Code is: " & lngCode & vbNewLine & GetTxt(lngCode) 
    End Sub 

    Function GetTxt(ByVal lngCode) As String 
     Dim objXmlHTTP As Object 
     Dim objRegex As Object 
     Dim objRegMC As Object 
     Dim strResponse As String 
     Dim strSite As String 

     Set objXmlHTTP = CreateObject("MSXML2.XMLHTTP") 
     strSite = "http://msdn.microsoft.com/en-us/goglobal/bb964664" 

     On Error GoTo ErrHandler 
     With objXmlHTTP 
      .Open "GET", strSite, False 
      .Send 
      If .Status = 200 Then strResponse = .ResponseText 
     End With 
     On Error GoTo 0 

     strResponse = Replace(strResponse, "</td><td>", vbNullString) 
     Set objRegex = CreateObject("vbscript.regexp") 
     With objRegex 
      .Pattern = "><td>([a-zA-Z- ]+)[A-Fa-f0-9]{4}" & lngCode      
      If .Test(strResponse) Then 
       Set objRegMC = .Execute(strResponse) 
       GetTxt = objRegMC(0).submatches(0) 
      Else 
       GetTxt = "Value not found from " & strSite 
      End If 
     End With 
     Set objRegex = Nothing 
     Set objXmlHTTP = Nothing 
     Exit Function 
ErrHandler: 
     If Not objXmlHTTP Is Nothing Then Set objXmlHTTP = Nothing 
     GetTxt = strSite & " unable to be accessed" 
    End Function 
+1

Muchas gracias. Hace lo que estaba buscando. Reemplacé a LOCALE_SNATIVELANGNAME = & H4 con LOCALE_SISO639LANGNAME = & H59 para obtener un valor independiente local. – BetaRide

+1

¿Pueden las personas guiarme acerca de cómo mostrar el idioma apropiado después de identificar la ubicación ... si tiene diferentes archivos de recursos ... entonces, ¿cómo hacer estos archivos en el editor de VBA de Excel ... ??? –

9
dim lang_code as long 
lang_code = Application.LanguageSettings.LanguageID(msoLanguageIDUI) 
+0

Gracias, eso funciona. Pero acabo de obtener un número. ¿Cómo puedo descubrir el lenguaje real que representan estos números? – BetaRide

+7

Puede encontrar una lista de LCID aquí http://msdn.microsoft.com/en-us/goglobal/bb964664 –

Cuestiones relacionadas