Seite 1 von 2

Google Übersetzer

Verfasst: 21.05.2016 13:04
von Velindos
Hallo Leute,

mit dem Senden von "https://translate.google.at/?hl=de#de/e ... Cbersetzen!" kann man von Google eine Übersetzung anfordern.

Manko dieser Methode ist, dass Sie auf die Google Page umschaltet und somit ich von meiner aktuellen Page getrennt werde. Nun möchte ich den markierten Text lediglich Übersetzt haben und nicht auf die Google Page gehen.

Habe nach diesen Problem schon gegoogelt aber bin nicht so richtig weitergekommen. Das markieren und senden ist kein Problem aus dem Webgadget heraus, aber wie erhalte ich den Übersetzen Text, damit ich Ihn einfügen kann?

Vielleicht hat jemand mit diesem Problem schon zu tun gehabt und kann mir helfen!

Gruss ... Velindos

Re: Google Übersetzer

Verfasst: 21.05.2016 13:18
von RSBasic
Es gab mal direkte URLs mit Parametern um beliebige Wörter automatisiert zu übersetzen. Man hat ein XML-String bekommen, den man auswerten konnte. Aber das hat Google irgendwann festgestellt und hat dafür gesorgt, dass man das nicht mehr so einfach machen kann. Google bietet selbst den Entwicklern eine API-Schnittstelle an, aber ist leider kostenpflichtig.
Du kannst allerdings mit WebGadget die Übersetzungsseite mit Parametern laden. Nur das Problem ist, das du wahrscheinlich hast, dass du nur den Quellcode der zuerst geladenen Seite bekommst. Die Übersetzung erfolgt über Ajax und wird nachträglich in das Eingabefeld eingefügt.
Um an aktuellen und vollständigen Quellcode zu kommen, musst du nach dem Laden folgendes ausführen:

Code: Alles auswählen

Procedure.s WebGadget_PageHtml(Gadget)
  Protected Result$ = ""
  Protected Document.IHTMLDocument3
  Protected Root.IHTMLElement
  Protected bstr_html
  
  Document.IHTMLDocument3 = WebGadget_Document(Gadget, ?IID_IHTMLDocument3)
  If Document
    If Document\get_documentElement(@Root.IHTMLElement) = #S_OK
      If Root\get_outerHTML(@bstr_html) = #S_OK And bstr_html
        Result$ = PeekS(bstr_html, -1, #PB_Unicode)
        SysFreeString_(bstr_html)
      EndIf
      
      Root\Release()
    EndIf                       
    Document\Release()
  EndIf         
  
  ProcedureReturn Result$
EndProcedure
Dann hast du den vollständigen Quellcode. Anschließend musst du nur filtern und das Div-Element finden und das übersetzte Wort ermitteln. Du kannst das entweder mit RegEx machen oder manuell mit FindString() und Mid().

Re: Google Übersetzer

Verfasst: 21.05.2016 13:44
von udg
Kannst du mal ein einfaches Beispiel posten? Ich habe evtl eine Idee, verstehe aber vielleicht deine Frage falsch.

Re: Google Übersetzer

Verfasst: 21.05.2016 14:03
von RSBasic
Nachtrag: Hier noch ein vollständiges Beispiel, um den vollständigen Quellcode zu ermitteln, damit man das übersetzte Wort problemlos auslesen kann. In meinem Beispiel kann man auch gut sehen, dass das Ermitteln mit #PB_Web_HtmlCode überhaupt nicht funktioniert, wenn Ajax verwendet wird:

Code: Alles auswählen

EnableExplicit

Define CurrentDOM$

Procedure WebGadget_Document(Gadget, *IID)
  Protected Document = 0
  Protected Browser.IWebBrowser2
  Protected DocumentDispatch.IDispatch
  
  Browser.IWebBrowser2 = GetWindowLong_(GadgetID(Gadget), #GWL_USERDATA)
  If Browser
    If Browser\get_Document(@DocumentDispatch.IDispatch) = #S_OK And DocumentDispatch
      DocumentDispatch\QueryInterface(*IID, @Document)
      DocumentDispatch\Release()
    EndIf
  EndIf     
  
  ProcedureReturn Document
EndProcedure

Procedure.s WebGadget_PageHtml(Gadget)
  Protected Result$ = ""
  Protected Document.IHTMLDocument3
  Protected Root.IHTMLElement
  Protected bstr_html
  
  Document.IHTMLDocument3 = WebGadget_Document(Gadget, ?IID_IHTMLDocument3)
  If Document
    If Document\get_documentElement(@Root.IHTMLElement) = #S_OK
      If Root\get_outerHTML(@bstr_html) = #S_OK And bstr_html
        Result$ = PeekS(bstr_html, -1, #PB_Unicode)
        SysFreeString_(bstr_html)
      EndIf
      
      Root\Release()
    EndIf                       
    Document\Release()
  EndIf         
  
  ProcedureReturn Result$
EndProcedure

If OpenWindow(0, 0, 0, 1024, 768, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  WebGadget(1, 0, 0, WindowWidth(0), WindowHeight(0)-40, "https://translate.google.at/?hl=de#de/en/Das%20will%20ich%20%C3%9Cbersetzen!")
  ButtonGadget(2, WindowWidth(0)-210, WindowHeight(0)-30, 200, 20, "Mit WebGadget_PageHtml ermitteln", 0)
  ButtonGadget(3, WindowWidth(0)-420, WindowHeight(0)-30, 200, 20, "Mit #PB_Web_HtmlCode ermitteln", 0)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 2
            CurrentDOM$ = WebGadget_PageHtml(1)
            If FindString(CurrentDOM$, "I will") > 0
              Debug "Gefunden"
            Else
              Debug "Nicht gefunden"
            EndIf
            ;Debug CurrentDOM$
          Case 3
            CurrentDOM$ = GetGadgetItemText(1, #PB_Web_HtmlCode)
            If FindString(CurrentDOM$, "I will") > 0
              Debug "Gefunden"
            Else
              Debug "Nicht gefunden"
            EndIf
            ;Debug CurrentDOM$
        EndSelect
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf

DataSection
  IID_IHTMLDocument2: ; {332C4425-26CB-11D0-B483-00C04FD90119}
  Data.l $332C4425
  Data.w $26CB, $11D0       
  Data.b $B4, $83, $00, $C0, $4F, $D9, $01, $19
  IID_IHTMLDocument3: ; {3050F485-98B5-11CF-BB82-00AA00BDCE0B}
  Data.l $3050F485
  Data.w $98B5, $11CF
  Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
  IID_NULL: ; {00000000-0000-0000-0000-000000000000}
  Data.l $00000000
  Data.w $0000, $0000
  Data.b $00, $00, $00, $00, $00, $00, $00, $00
EndDataSection

Re: Google Übersetzer

Verfasst: 21.05.2016 14:18
von JMaker
Tolles Beispiel :allright: Funzt sehr gut, ist das ein PB Bug bez. #PB_Web_HtmlCode? Und was ist Ajax? Kannst du mir das erklären? Kann damit nichts anfangen und weiss nicht was du damit meinst... Gegoogelt habe ich schon aber den Wiki Artikel verstehe ich leider nicht. :(

Re: Google Übersetzer

Verfasst: 21.05.2016 14:21
von RSBasic
Ajax wird verwendet, um Informationen nachträglich serverseitig zu laden. Normalerweise gibt es nur diese Reihenfolge: Server-Verarbeitung (PHP, ASP, ASP.NET o.ä.) Bild Client-Verarbeitung (Browser (HTML, CSS, JS o.ä.)).
Wenn man aber gerne nach dem Laden der Seite erneut auf den Server zugreifen möchte, kann man Ajax verwenden, um asynchron im Hintergrund bestimmte Daten zu holen oder was in die Datenbank zu speichern, ohne die komplette Seite neuladen zu müssen.

Re: Google Übersetzer

Verfasst: 21.05.2016 14:36
von JMaker
Danke du bist der beste :praise:

Re: Google Übersetzer

Verfasst: 21.05.2016 14:50
von udg
ich hab seine Frage leider nicht so recht verstanden. Wenn er auf seiner Seite bleiben will, kann er den Google Übersetzer doch auch per iframe inkluden.
Oder soll markierter Text kopiert und übernommen werden?

Nuja, mal sehen.
grüße

Re: Google Übersetzer

Verfasst: 21.05.2016 16:57
von Velindos
Hallo Leute!
Hallo RSBasic!

War gerade Einkaufen, daher hat´s länger gedauert!

RSBasic, DANKE! Für deine Einführung und dein Beispiel, das funzt!

@udg
"Wenn er auf seiner Seite bleiben will, kann er den Google Übersetzer doch auch per iframe inkluden."
Also das mit der iframe, da habe ich keine Ahnung wie man das machen soll!

Zu der beabsichtigten Lösung wäre zu Sagen, ich markiere den Text auf einer Page und mache per Buttondruck oder PopUp einen Translate!

Zuerst kopiere ich das markierte und anschliessend füge ich das Translate auf dessen Platz ein
(Hilft bei schwierigen Übersetzungen etc.)

Anschliessend notiere ich mir das in meinen Velindos.

Das machte ich bis dato per Google Translator, nur war das Umschalten sehr mühsam und nun werde ich Versuchen das ganze mit dem Beispiel von RSBasic umzusetzten!

Nochmals besten Dank!!!

Gruss ... Velindos

Re: Google Übersetzer

Verfasst: 21.05.2016 20:03
von Kiffi
<Halb-OT>

zum Übersetzen verwende ich gerne das Freeware-Tool QTranslate (https://quest-app.appspot.com/home)

Text markieren und zwei Mal <Strg> drücken und schon erscheint die Übersetzung.

Unterstützt viele Sprachen und mehrere Übersetzungs-Dienste.

</Halb-OT>