Vba 实现谷歌翻译

Vba 实现谷歌翻译,vba,ms-access,ms-access-2010,google-translate,Vba,Ms Access,Ms Access 2010,Google Translate,我曾尝试使用谷歌翻译,用c#将名字从一种语言翻译成另一种语言,效果很好,但现在我尝试使用ms access vba做同样的事情。我尝试了很多方法,但都没有成功! 这是用c#编写的代码,工作正常 public string trans_arabic_to_english(string word) { var toLanguage = "en";//English var fromLanguage = "a

我曾尝试使用谷歌翻译,用c#将名字从一种语言翻译成另一种语言,效果很好,但现在我尝试使用ms access vba做同样的事情。我尝试了很多方法,但都没有成功! 这是用c#编写的代码,工作正常

public string trans_arabic_to_english(string word)
        {
            var toLanguage = "en";//English
            var fromLanguage = "ar";//Deutsch
            var url = $"https://translate.googleapis.com/translate_a/single?client=gtx&sl={fromLanguage}&tl={toLanguage}&dt=t&q={HttpUtility.UrlEncode(word)}";
            var webClient = new WebClient
            {
                Encoding = System.Text.Encoding.UTF8
            };
            var result = webClient.DownloadString(url);
            try
            {
                result = result.Substring(4, result.IndexOf("\"", 4, StringComparison.Ordinal) - 4);
                return result;
            }
            catch
            {
                return "Error";
            }
        }
这是vba中的代码

Private Sub Command0_Click()
Dim toLan As String, fromLan As String, resp As String, s As String, a_name As String, url As String

toLang = "ar"
fromlang = "en"
a_name = "omar khalil"
url = "https://translate.googleapis.com/translate_a/single?"
url = url & "client=gtx&sl={""" & toLang & """}&tl={""" & fromlang & """}&dt=t&q={""" & a_name & """}"

url = "https://translate.googleapis.com/translate_a/single?client=gtx&sl="
url = url & fromlang & "&tl=" & to_lang & "&dt=t&q=" & a_name
'==
Dim ob As Object
Set ob = CreateObject("WinHttp.WinHttpRequest.5.1")
ob.Open "POST", url, False
ob.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
ob.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
ob.Send
If ob.Status <> 200 Then
resp = ob.ResponseText
MsgBox resp
End Sub

Private子命令0\u Click()
Dim toLan作为字符串,fromLan作为字符串,resp作为字符串,s作为字符串,a_名称作为字符串,url作为字符串
toLang=“ar”
fromlang=“en”
a_name=“omar khalil”
url=”https://translate.googleapis.com/translate_a/single?"
url=url&“client=gtx&sl={”“toLang&”“}&tl={”“fromlang&”“}&dt=t&q={”“a_name&”“}”
url=”https://translate.googleapis.com/translate_a/single?client=gtx&sl="
url=url&fromlang&“&tl=“&to\u lang&”&dt=t&q=“&a\u name
'==
作为对象的Dim ob
Set ob=CreateObject(“WinHttp.WinHttpRequest.5.1”)
ob.打开“POST”,url,False
ob.SetRequestHeader“用户代理”、“Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.0)”
ob.SetRequestHeader“内容类型”、“应用程序/x-www-form-urlencoded”
发送
如果ob.状态为200,则
resp=ob.ResponseText
MsgBox resp
端接头
我也尝试过使用WinHttp,但一点运气都没有!
任何人都可以帮助我解决此问题,谢谢。

请尝试下一个功能:

Private Function GTranslate(strInput As String, strFromLang As String, strToLang As String) As String
    Dim strURL As String, objHTTP As Object, objHTML As Object, objDivs As Object, objDiv As Variant
    
    strURL = "https://translate.google.com/m?hl=" & strFromLang & _
        "&sl=" & strFromLang & _
        "&tl=" & strToLang & _
        "&ie=UTF-8&prev=_m&q=" & strInput
        
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    objHTTP.Open "GET", strURL, False
    objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
    objHTTP.Send ""
    
    Set objHTML = CreateObject("htmlfile")
    With objHTML
        .Open
        .Write objHTTP.responseText
        .Close
    End With
    
    Set objDivs = objHTML.getElementsByTagName("div")
    For Each objDiv In objDivs
        'If objDiv.className = "t0" Then              'it does not work, anymore
        If objDiv.className = "result-container" Then 'adapted on December 28th
            GTranslate = objDiv.innerText: Exit For
        End If
    Next objDiv
    
    Set objHTML = Nothing: Set objHTTP = Nothing
End Function
它可以用下一种方式调用:

Sub testTranslateG()
  MsgBox GTranslate("Este es un libro", "auto", "en")
End Sub
第二个参数可以是“auto”(与测试子项类似),如果需要更准确的翻译,也可以是特定语言的缩写(“es”-西班牙语,“ru”-俄语”,“ro”-罗马尼亚语等)


为了找到正确的缩写,你可以打开谷歌翻译页面,右键点击并选择“查看页面来源”。然后试着找一些语言。让我们说西班牙语。在该区域中,您将看到一个脚本包含如下字符串:“代码:'it',名称:'意大利语'”。很容易理解,“it”是意大利语的缩写…

你能分享你的尝试吗(在VBA中)?完成后,你可以检查它,请检查我的答案功能代码。它使用“MSXML2.ServerXMLHTTP”…它正常工作了3个月,现在它不工作了。我尝试了这么多代码,但现在它返回无效的翻译,你能试试吗,或者告诉我该怎么做?谢谢你advanced@omarzKH:如果它起作用但突然不起作用,他们可能会更改相关的类名。。。让我检查一下,如果我发现了什么,我会尝试提出解决方案。用新的工人阶级修改代码。如果objDiv.className=“t0”,则使用
如果objDiv.className=“result container”然后
更改行
。请测试一下。我只做了几次测试,看起来很有效……我已经试过了,但没有成功