programing

현재 사용자 언어 찾기

linuxpc 2023. 6. 20. 21:24
반응형

현재 사용자 언어 찾기

프로그램에서 현재 사용자 언어를 어떻게 알 수 있습니까?

적절한 언어로 양식을 표시하려면 이것이 필요합니다.

저의 초기 코드(이 vbforum 코드를 사용하여)는 Windows와 Excel이 공통 언어를 공유한다고 가정했습니다(방탄이 아닐 가능성이 있음).

갱신된

개정된 코드:

  1. Local ID(LCID)를 반환합니다.
  2. 이 msft 링크에서 LCID를 검색합니다.
  3. 를 사용하여 LCID를 구문 분석하여 언어를 가져옵니다.

아래 내 컴퓨터의 샘플 출력

코드는 사용자에게 LCID 웹 사이트에 액세스하거나 국가 이름을 구문 분석하는 데 오류가 있는지 알려줍니다.

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
dim lang_code as long
lang_code = Application.LanguageSettings.LanguageID(msoLanguageIDUI)

이것은 brettdj가 게시한 코드의 또 다른 변형입니다.

Sub Test_GetLocale_UDF()
Dim lngCode As Long

lngCode = Application.LanguageSettings.LanguageID(msoLanguageIDUI)
MsgBox "Code Is: " & lngCode & vbNewLine & GetLocale(lngCode)
End Sub

Function GetLocale(ByVal lngCode) As String
Dim html            As Object
Dim http            As Object
Dim htmlTable       As Object
Dim htmlRow         As Object
Dim htmlCell        As Object
Dim url             As String

Set html = CreateObject("htmlfile")
Set http = CreateObject("MSXML2.XMLHTTP")
url = "https://www.science.co.il/language/Locale-codes.php"

On Error GoTo ErrHandler
    With http
        .Open "GET", url, False
        .send
        If .Status = 200 Then html.body.innerHTML = .responseText
    End With
On Error GoTo 0

Set htmlTable = html.getElementsByTagName("table")(0)

For Each htmlRow In htmlTable.getElementsByTagName("tr")
    For Each htmlCell In htmlRow.Children
        If htmlCell.innerText = CStr(lngCode) Then
            GetLocale = htmlRow.getElementsByTagName("td")(0).innerText
            Exit For
        End If
    Next htmlCell
Next htmlRow

If GetLocale = "" Then GetLocale = "Value Not Found From " & url

Exit Function
ErrHandler:
If Not http Is Nothing Then Set http = Nothing
GetLocale = url & " Unable To Be Accessed"
End Function
Select Case Application.International(xlApplicationInternational.xlCountryCode) 
   Case 1: Call MsgBox("English") 
   Case 33: Call MsgBox("French") 
   Case 49: Call MsgBox("German") 
   Case 81: Call MsgBox("Japanese") 
End Select 

바로 여기서: https://bettersolutions.com/vba/macros/region-language.htm

관련 문서: https://learn.microsoft.com/en-us/office/vba/api/excel.xlapplicationinternational

VBAApplication.LanguageSettings.LanguageID(msoLanguageIDUI)Microsoft Office Access 또는 Microsoft Excel 사용자 인터페이스 언어만 가져옵니다.그러나 Windows 디스플레이에 사용되는 Windows 시스템 표시 언어를 모두 반영하지는 않습니다.MsgBox()단추 등

사용자가 Windows 제어판을 통해 Windows 디스플레이 언어를 변경해도 이 응용 프로그램 수준 설정은 변경되지 않습니다.이 경우 이 커널 dll 함수를 사용하여 VBA 모듈에 다음 코드가 있는 새 LCID(Microsoft Language Code IDentifier, 1036=French, 1033=English, ...)를 가져올 수 있습니다.

Private Declare Function GetUserDefaultUILanguage Lib "kernel32.dll" () As Long

Public Function winGetUserDefaultUILanguage()
  winGetUserDefaultUILanguage = GetUserDefaultUILanguage()
End Function

그러면 공공 기관에 전화를 걸 수 있습니다.winGetUserDefaultUILanguage()VBA 코드의 모든 곳에서 Windows LCID를 가져옵니다.

커널 dll 함수GetUserDefaultUILanguage()에서는 Windows 표시 언어 ID를 통한 변경 내용을 반영합니다.


예를 들어, 프랑스어 Windows 표시 언어인 LCID=1036을 사용하고 있으므로, 내 사무실도 프랑스어(LCID=1036)로 되어 있습니다.

enter image description here

VBA 디버거 콘솔:

enter image description here


이제 제어판(LCID=1033(영어)을 통해 영어 Windows 표시 언어로 전환하지만 내 Office 언어 ID는 변경되지 않습니다(LCID=1036).

enter image description here

VBA 디버거 콘솔:

enter image description here

LCID에서 Microsoft API 문서에서 언어 태그, 언어 이름을 추가로 얻을 수 있습니다.

언급URL : https://stackoverflow.com/questions/8588728/find-the-current-user-language

반응형