2011-12-21 4 views
12

Come posso dire la lingua corrente dell'utente in un programma ?Trovare la lingua corrente dell'utente

Ho bisogno di questo per mostrare un modulo in una lingua appropriata.

+0

@brettdj mi sa il più generico 'excel' è sempre un tag utile così come rende più facile le ricerche future. – Fionnuala

risposta

13

mio codice iniziale (utilizzando questo vbforum code) presume che Windows e Excel condividono un linguaggio comune - probabile ma non a prova di proiettile.

aggiornato

Il codice rivisto:

  1. restituisce l'ID impostazioni internazionali (LCID).
  2. Cerca LCID da questo msft link.
  3. Analizza la LCID utilizzando un per ottenere la lingua.

uscita di esempio sulla mia macchina sotto

Il codice permette all'utente di sapere se ci sono errori di accesso al sito LCID, o l'analisi del nome del paese.

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

Grazie mille. Fa quello che stavo cercando. Ho sostituito LOCALE_SNATIVELANGNAME = & H4 con LOCALE_SISO639LANGNAME = & H59 per ottenere un valore indipendente locale. – BetaRide

+1

Puoi dirmi delle persone su come mostrare il linguaggio appropriato dopo aver identificato la posizione ... se hai diversi file di risorse ... allora come fanno questi file nell'editor VBA di Excel ... ??? –

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

Grazie, funziona. Ma ho solo un numero. Come posso scoprire la vera lingua di questi numeri? – BetaRide

+7

Qui puoi trovare un elenco di LCID http://msdn.microsoft.com/en-us/goglobal/bb964664 –