Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find the current user language

How can I tell the current user language in a vba program?

I need this to show a form in an appropriate language.

like image 672
BetaRide Avatar asked Dec 21 '11 10:12

BetaRide


People also ask

How do I know what language a user is?

In this article, we'll go through three different ways of detecting a user's locale: through the browser's navigator. language s (on the client) object, through the Accept-Language HTTP header (on the server), and through geolocation using the user's IP address (on the server).

How do I find user language in Salesforce?

Change your personal language in Salesforce In Salesforce Classic: Setup | Personal Setup | My Personal Information | Edit. In Salesforce Classic (Improved Setup): Your name | My Settings | Personal | Language & Time Zone. In Lightning Experience: Your Avatar | Settings | Language & Time Zone.

How to detect user locale?

To get the user's locale in the browser, access the first element of the languages property on the navigator object, e.g. navigator. languages[0] . The property returns an array of strings that represent the user's preferred languages.


1 Answers

My initial code (utilising this vbforum code) assumed that Windows and Excel share a common language - likely but not bulletproof.

updated

The revised code:

  1. Returns the Locale ID (LCID).
  2. Looks up the LCID from this msft link.
  3. Parses the LCID using a regexp to get the language.

Sample output on my machine below

The code will let the user know if there are any errors in accessing the LCID website, or in parsing the country name.

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
like image 157
brettdj Avatar answered Oct 06 '22 02:10

brettdj