Excel - VBA

Google 번역 앱을 이용한 번역 함수 만들기

EGTools 2023. 7. 11. 19:15
728x90

이 함수는 EGTools에 추가되었습니다.

 

Google의 번역 서비스를 이용한 번역은 URL에 번역 옵션을 넣어서 요청합니다.

로그인이 필요하지 않은 서비스라서 사용이 간편합니다.

 

서비스 주소는 https://translate.google.com 이나 모바일 버전이 좀 더 간단하므로

실제 사용에는 https://translate.google.com/m 을 사용합니다.

URL에 넣어야 할 옵션은 4가지 입니다.

  • hl=xx  : 화면에 사용할 언어입니다.  한국어는 ko로 지정
  • sl=xx : 번역할 원문의 언어입니다. auto로 설정할 수 있습니다.
  • tl=xx : 변역되어 나와야 하는 언어입니다. 생략하면 ko로 합니다.
  • q=xx : 번역에 사용할 원문 문자열입니다. URLENCODE 하여야 합니다.

이렇게 구성하면 요청 URL이 아래처럼 됩니다.

https://translate.google.com/m?hl=ko&sl=ko&tl=en&q=%EC%82%B6%EC%9D%80%20%EA%B3%84%EB%9E%80%EC%9D%B4%EC%A3%A0

 

샘플 URL을 크롬 주소창에 넣고 시험해 보고 결과가 나오면 OK

이걸 VBA를 이용하여 사용자 정의 함수로 만들면 아래와 같습니다.

주의할 사항은 중국어의 경우  zh-CN과 zh-TW인데 대소문자를 정확히 적용해야 문제가 없으므로

강제로 적용되도록 코딩해 줍니다.

Public Function GTranslate(Text As Variant, Optional sl As String = "auto", Optional tl As String = "ko")
    Dim svcURL As String: svcURL = "https://translate.google.com/m?"
    Dim Cell As Variant, sText As String, rText As String, ll As String, iPos As Long
    Dim sXML As String, oHTML As Object, oNodes As Object, oNode As Object
    
    ll = ll & ",auto,af,sq,am,ar,hy,as,ay,az,bm,eu,be,bn,bho,bs,bg,ca,ceb,zh-CN,zh,zh-TW,co,hr,cs,da,dv,doi,nl,en,eo,et,ee,fil,fi,fr,fy,gl,ka,de,el,gn,gu,ht,ha,haw,he,iw,hi,hmn,hu,is,ig,ilo,id,ga,it,ja,jv,jw,kn,kk,km,rw,gom,"
    ll = ll & "ko,kr,kri,ku,ckb,ky,lo,la,lv,ln,lt,lg,lb,mk,mai,mg,ms,ml,mt,mi,mr,mni-mtei,lus,mn,my,ne,no,ny,or,om,ps,fa,pl,pt,pa,qu,ro,ru,sm,sa,gd,nso,sr,st,sn,sd,si,sk,sl,so,es,su,sw,sv,tl,tg,ta,tt,te,th,ti,ts,tr,tk,ak,uk,ur,ug,uz,vi,cy,xh,yi,yo,zu,"
    If InStr(1, ll, "," & sl & ",", vbTextCompare) = 0 Then GTranslate = "ERROR:Source language Code invalid": Exit Function
    If InStr(1, ll, "," & tl & ",", vbTextCompare) = 0 Then GTranslate = "ERROR:Target language Code invalid": Exit Function
    
    If Not IsInternetConnected Then GTranslate = "ERROR:No Internet connection": Exit Function
    
    '// 언어코드 교정
    sl = LCase(sl): tl = LCase(tl)
    '// 한국어를 kr로 입력하는 오류 수정
    If sl = "kr" Then sl = "ko"
    If tl = "kr" Then tl = "ko"
    '// 중국어는 zh-CN과 zn-TW 처럼 대분자가 있음에 주의
    If sl = "zh" Then sl = "zh-CN"
    If tl = "zh" Then tl = "zh-CN"
    If sl = "zh-cn" Then sl = "zh-CN"
    If tl = "zh-cn" Then tl = "zh-CN"
    If sl = "zh-tw" Then sl = "zh-TW"
    If tl = "zh-tw" Then tl = "zh-TW"
    
    If TypeName(Text) = "Range" Or IsArray(Text) Then
        For Each Cell In Text
            sText = sText & IIf(sText = "", "", vbNewLine) & Cell
        Next
    Else
        sText = CStr(Text)
    End If
    sText = Application.Trim(sText)
    If sText = "" Then GTranslate = "": Exit Function
    
    sText = EncodeURL(sText)
    svcURL = svcURL & "hl=ko&sl=" & sl & "&tl=" & tl & "&q=" & sText
    sXML = getURL(svcURL)
    If InStr(1, sXML, "Error 413", vbTextCompare) Then GTranslate = "ERROR:Too long text.": Exit Function
    
    '//결과값 확인 방식은 아래 2가지중 하나를 선택해서 사용
    '// htmlfile을 이용하여 Tag와 ClassName으로 확인하는 방법
'    Set oHTML = CreateObject("htmlfile")
'    oHTML.body.innerHTML = sXML
'    Set oNodes = oHTML.getElementsByTagName("div")
'    For Each oNode In oNodes
'        If oNode.classname = "result-container" Then rText = oNode.innerText: Exit For
'    Next oNode

	'// 텍스트를 잘라내서 확인하는 방법
    iPos = InStr(1, sXML, "<div class=""result-container"">", vbTextCompare)
    If iPos = 0 Then GTranslate = "ERROR:No result": Exit Function
    rText = Mid(sXML, iPos + 30)
    iPos = InStr(1, rText, "</div>", vbTextCompare)
    If iPos = 0 Then GTranslate = "ERROR:html error": Exit Function
    rText = Left(rText, iPos - 1)
    
    GTranslate = DecodeHTML(rText)
    
End Function

 

여기에 사용된 IsInternetConnected 함수는 여기를 참고하세요.

https://egtools.tistory.com/entry/VBA-IsInternetConnected

 

EncodeURL함수와 DecodeHTML함수는 여기를 참고하세요.

https://egtools.tistory.com/entry/VBA-URLEncode-and-DecodeHTML-Using-htmlfile

 

getURL함수는 지정한 URL로부터 HTML소스를 가져오는 함수입니다.

https://egtools.tistory.com/entry/VBA-Web-Scraping

 

 

네이버 파파고 API를 사용하는 방법은 아래를 참고하세요.

https://egtools.tistory.com/entry/Naver-Papago-Translate-API

 

Naver 파파고 API를 이용하여 번역하기

이 함수는 EGTools에 추가될 예정입니다. 네이버의 파파고 API를 이용하여도 번역을 할 수 있는데, Google API와는 다르게 API를 사용할 수 있는 권한을 등록해야 합니다. 여기서는 API 권한신청과 관련

egtools.tistory.com

 

728x90