** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Traduciendo con Google Translate
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoTraduciendo con Google Translate

 Responder Responder
Autor
Mensaje
OmniPresente Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 1888
Enlace directo a este mensaje Tema: Traduciendo con Google Translate
    Enviado: 28/Octubre/2019 a las 11:07
Saludos, compañeros:

¿Alguno habéis logrado traducir textos con Google Translate?

Estoy utilizando esta función:

Public Function AutoTranslate(ByVal Text As String) As String
    'Add references to [Microsoft HTML Controls] and [Microsoft XML 6.0]
    Dim IE As MSXML2.XMLHTTP60
    Dim HTMLDoc As MSHTML.HTMLDocument
    Dim HTMLBody As MSHTML.HTMLBody
    Dim URL As String
    
    Set IE = New MSXML2.XMLHTTP60
    
    URL = "https://translate.google.com/#es/en/" & Text
    IE.Open "GET", URL, True
    IE.send
    
    While IE.ReadyState <> 4
        DoEvents
    Wend
    
    Set HTMLDoc = New MSHTML.HTMLDocument
    Set HTMLBody = HTMLDoc.body
    HTMLBody.innerHTML = IE.responseText
    AutoTranslate = HTMLBody.innerHTML
    
    Exit Function
    
End Function


... pero me devuelve lo siguiente:

? AutoTranslate("solo sé que no sé nada")

<A href="about://www.google.com/"><SPAN aria-label=Google id=logo></SPAN></A>
<P><B>404.</B> <INS>That’s an error.</INS> 
<P>The requested URL <CODE>/%23es/en/solo%20s%E9%20que%20no%20s%E9%20nada</CODE> was not found on this server. <INS>That’s all we know.</INS> </P>


... supongo que porque lo que tengo que buscar no es la propiedad responseText sino alguna otra, pero no estoy muy puesto en estos controles XML... ¿se os ocurre algo?

Gracias de antemano.

Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 28/Octubre/2019 a las 12:41
Esa es una de las respuestas de Google cuando no consigue el recurso solicitado.
Arriba
OmniPresente Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 1888
Enlace directo a este mensaje Enviado: 28/Octubre/2019 a las 13:00
Sí, el caso es que si la URL la tecleas tal cual en cualquier explorador:


Sí que funciona y te devuelve la traducción; por lo tanto entiendo que lo que tengo que "buscar" el valor del cuadro que contiene el texto traducido, pero no sé cómo :-(

Gracias.
Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 28/Octubre/2019 a las 13:33
Imagino que es por problemas con headers.
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: La Gloria
Estado: Sin conexión
Puntos: 3878
Enlace directo a este mensaje Enviado: 29/Octubre/2019 a las 02:14
Mira a ver si a partir de aquí te resulta más fácil

Sub xx()
  AbreUrlB ("/#es/en/solo sé que no sé nada")
End Sub


Function AbreUrlB(Url)
    Dim web1 As Object
    On Error Resume Next
    Set web1 = CreateObject("InternetExplorer.Application")
    With web1
    .navigate ("https://translate.google.com" & Url)
     Application.Wait Now + TimeValue("00:00:100") ' Just in case
     web1.Visible = True
    '.Quit
    End With
    Set web1 = Nothing
End Function

Luis
El Búho es un pajarraco
Arriba
OmniPresente Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 10/Febrero/2009
Localización: España
Estado: Sin conexión
Puntos: 1888
Enlace directo a este mensaje Enviado: 29/Octubre/2019 a las 11:20
Sí, la posibilidad de automatizar Explorer y "cortar el cacho" del string devuelto que contenga el texto traducido ya la había barajado y al final es lo que he acabado haciendo, aunque buscaba una opción más "elegante".

Esta función es un poco lenta y tampoco sé si Google, a partir de cierto número de llamadas lo vaya a entender como una especie de "ataque" y bloquee la IP. Tampoco es 100% fiable porque en algunos casos me devuelve un blanco, aunque son pocos. He probado con unas 100 llamadas y ha funcionado bien

Pego cómo ha quedado la función por si a alguno os sirve...

Public Function TraduceTexto(TextoTraducir, DesdeIdi, HastaIdi)
If IsNull(TextoTraducir) Then Exit Function
TraduceTexto = Null
On Error Resume Next
Set ObjWeb = CreateObject("InternetExplorer.Application")
ObjWeb.navigate "https://translate.google.com/#" & DesdeIdi & "/" & HastaIdi & "/" & TextoTraducir
Do While ObjWeb.ReadyState <> 4
Loop
TEXTO = Replace(ObjWeb.Document.documentElement.innerHTML, """", "'")
ObjWeb.Quit
Set ObjWeb = Nothing
DESDE = InStr(1, TEXTO, "<span class='tlid-translation translation' lang='" & HastaIdi & "'><span title=''>") + 68
HASTA = InStr(DESDE, TEXTO, "</span></span><span class='tlid-translation-gender-indicator translation-gender-indicator'>")
AUX = Mid(TEXTO, DESDE, HASTA - DESDE)
TraduceTexto = Replace(AUX, "</span> <span title=''>", " ")
On Error GoTo 0
End Function

Y, la llamada sería:

Traduccion = TraduceTexto("Todo lo ignora quien de nada duda","es","en")

Gracias a todos por vuestra ayuda, se puede cerrar el hilo.

Un abrazo.

Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable