Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Texte mit Google übersetzen (https://www.delphipraxis.net/147745-texte-mit-google-uebersetzen.html)

Larsi 15. Feb 2010 14:32


Texte mit Google übersetzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich habe mal ein Beispiel programmiert, wie man in Delphi mithilfe des Google Übersetzungs Service Texte übersetzen kann. Hierfür wird der Quelltext der Url, in welcher der zu übersetzende Text steht ausgelesen, und die Übersetzung extrahiert. Bis jetzt kann man nur DE > EN oder EN > DE übersetzen aber das zu erweitern, stellt ja keine Schwierigkeit dar. Indys werden benötigt. Sobald Google den HTML Code ändert, geht das natürlich nicht mehr, lässt sich aber einfach abändern. Hier der Code der eigentlichen Funktion:

Delphi-Quellcode:
uses IdHttp;

function Übersetzung(const Ausgangstext: string; i: integer): string;
var
a : Integer;
x : Integer;
t: string;
r: string;
idhttp1: TIdHttp;
begin
//Umlaute, Zeilenumbrüche, Leerzeichen ersetzen
Idhttp1 := TidHttp.Create();
t := StringReplace(Ausgangstext, ' ', '+',[rfReplaceAll, rfIgnoreCase]);
t := StringReplace(t, 'ä', 'ae',         [rfReplaceAll, rfIgnoreCase]);
t:= StringReplace(t, 'ö', 'oe',         [rfReplaceAll, rfIgnoreCase]);
t := StringReplace(t, 'ü', 'ue',         [rfReplaceAll, rfIgnoreCase]);
t := StringReplace(t, #13#10, '',        [rfReplaceAll, rfIgnoreCase]);
//Deutsch > Englisch oder Englisch > Deutsch
if i = 0 then
r := Idhttp1.Get('http://translate.google.de/translate_t?hl=&ie=UTF-8&text=' + t + '+%0D%0A&sl=de&tl=en#');
if i = 1 then
r := Idhttp1.Get('http://translate.google.de/translate_t?hl=&ie=UTF-8&text=' + t + '+%0D%0A&sl=en&tl=de#');
//Text im Quellcode, der vor der Übersetzung steht
x := Pos('gtrans value="', r);
//Text im Quellcode, der nach der Übersetzung steht
a := Pos('<br>">', r);
//Text zwischen Anfangs- und Endtext auslesen
Result := Copy(r, x + 14, a - x - 14);
end;
Beispielaufrufe:

Delphi-Quellcode:
//Deutsch zu Englisch
Memo2.Text := Übersetzung(Memo1.Text, 0);

//Englisch zu Deutsch
Memo2.Text := Übersetzung(Memo1.Text, 1);

Balu der Bär 15. Feb 2010 14:43

Re: Texte mit Google übersetzen
 
Sicher das Google das automatisierte Nutzen seines Services auf dieser Art gestattet?

fatalerror 15. Feb 2010 14:44

Re: Texte mit Google übersetzen
 
da gibt es doch die Google Ajax translate api, damit sollte es eigentlich einfacher funktionieren. Marco Canto hat doch mal bei einer genialen Demonstration dies vorgeführt.
Habe jetzt bei einer kurzen Recherche nur folgenden Link gefunden: Marco Cantu Translate

himitsu 15. Feb 2010 14:49

Re: Texte mit Google übersetzen
 
Delphi-Quellcode:
if i = 0 then t := t + '+%0D%0A&sl=de&tl=en';
if i = 1 then t := t + '+%0D%0A&sl=en&tl=de';
r := Idhttp1.Get('http://translate.google.de/translate_t?hl=&ie=UTF-8&text=' + t);

implementation 15. Feb 2010 15:00

Re: Texte mit Google übersetzen
 
Die Sprachauswahl ließe sich noch umschreiben:
Delphi-Quellcode:
const
  Languages: array[0..1] of string = ('en', 'de');

function Uebersetzung(const Ausgangstext, sl, tl: string): string;
begin
  ...
  //if i = 0 then
  //r := Idhttp1.Get('http://translate.google.de/translate_t?hl=&ie=UTF-8&text=' + t + '+%0D%0A&sl=de&tl=en#');
  //if i = 1 then
  //r := Idhttp1.Get('http://translate.google.de/translate_t?hl=&ie=UTF-8&text=' + t + '+%0D%0A&sl=en&tl=de#');
  r := IdHttp1.Get('http://translate.google.de/translate_t?hl=&ie=UTF-8&text=' + t + '+%0D%0A&sl='+sl+'&tl='+tl);
...
end;

...

Foo := Uebersetzung('Bar','de','en'); // Übersetze 'Bar' von Deutsch nach Englisch
Fuu := Uebersetzung(Foo,Languages[0],Languages[1]); // und wieder zurück

Larsi 15. Feb 2010 15:01

Re: Texte mit Google übersetzen
 
T ist aber der Ausgangstext.

markus5766h 15. Feb 2010 15:25

Re: Texte mit Google übersetzen
 
Hallo,
ab welcher Version geht denn so was

function Übersetzung(const Ausgangstext: string; i: integer): string;


bei mir würde Delphi meckern : [Error] ... Illegal character in input file: 'Ü' ($DC) :gruebel:

himitsu 15. Feb 2010 15:32

Re: Texte mit Google übersetzen
 
Zitat:

Zitat von markus5766h
ab welcher Version geht denn so was

ab TurboDelphi

markus5766h 15. Feb 2010 15:43

Re: Texte mit Google übersetzen
 
@himitsu : danke für die Erleuchtung :party:

Harry Stahl 23. Mär 2015 06:55

AW: Texte mit Google übersetzen
 
Das wollte ich gerade mal ausprobieren.

Man muss das HTTP durch einen SSL-IO-Handler ergänzen, damit es überhaupt läuft (da jetzt https-Adresse).

Bei einem Verbindungstest musste ich noch das HandleReditrects aktivieren, um den "HTTP/1.1 301 Moved Permanently" Fehler zu vermeiden.

Insgesamt funktioniert es aber nicht (Keine Fehlermeldung, wird einfach nichts zurückgeliefert).

Kennt jemand eine einfach funktionierende Lösung über diesen HPPT-Aufruf?

uligerhardt 23. Mär 2015 07:48

AW: Texte mit Google übersetzen
 
Hallo,

ich hab's grad mal über den Browser ausprobiert und https://translate.google.de/#de/en/Hallo als URL gekriegt. Vielleicht funktioniert's ja damit? :-)

Sir Rufo 23. Mär 2015 08:26

AW: Texte mit Google übersetzen
 
Google stellt eine kostenpflichtige API für solche Anwendungsfälle bereit.

Ob das Verwenden des kostenlosen Web-Dienstes in dieser Art zulässig ist vermag ich nicht zu sagen (habe da aber so meine Zweifel).

So ein Web-Dienst unterliegt auch einer gewissen Dynamik, so dass man gezwungen ist, die Auswertung der HTML-Seite dieser Dynamik auch entsprechend folgen zu lassen.

Die Auswertung der HTML-Seite mit
Delphi-Quellcode:
Pos
und Konsorten ist im Übrigen nicht der Weg, den man wählen sollte. Dazu bietet sich
Delphi-Quellcode:
IHTMLDocument(n)
an.

Neutral General 23. Mär 2015 08:38

AW: Texte mit Google übersetzen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1294457)
Die Auswertung der HTML-Seite mit
Delphi-Quellcode:
Pos
und Konsorten ist im Übrigen nicht der Weg, den man wählen sollte. Dazu bietet sich
Delphi-Quellcode:
IHTMLDocument(n)
an.

Schau dir mal den Quelltext von ein paar Google Seiten an. Egal ob translate oder die normale Suche. Da ist weder über pos noch über IHTMLDocument was machbar.

Sir Rufo 23. Mär 2015 08:45

AW: Texte mit Google übersetzen
 
Zitat:

Zitat von Neutral General (Beitrag 1294459)
Zitat:

Zitat von Sir Rufo (Beitrag 1294457)
Die Auswertung der HTML-Seite mit
Delphi-Quellcode:
Pos
und Konsorten ist im Übrigen nicht der Weg, den man wählen sollte. Dazu bietet sich
Delphi-Quellcode:
IHTMLDocument(n)
an.

Schau dir mal den Quelltext von ein paar Google Seiten an. Egal ob translate oder die normale Suche. Da ist weder über pos noch über IHTMLDocument was machbar.

Ok, ich hätte wohl besser schreiben sollen "einer HTML-Seite", da diese Aussage allgemein sein sollte. Denn wenn das Auslesen der Google-Seite so wie hier gezeigt gegen die Bestimmungen von Google verstösst, dann verstösst auch jeder konkrete Hinweis der Umgehung gegen die Forenregeln hier ;)

Harry Stahl 23. Mär 2015 08:54

AW: Texte mit Google übersetzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich mache das jetzt über eine Browser-Komponente (TWebrowser), rufe also die URL mit dem Text darin auf. Somit nutze ich doch einen Browser, um den Text anzuzeigen und mir in die Zwischenablage zu kopieren.

Der Unterschied ist, dass ich nicht per Drag & Drop von meiner Textvearbeitung die Texte zum Google-Fenster hin und zurück ziehen muss. Die Google Seite wird da ja auch vollständig angezeigt, wüsste nicht, was bei diesem Weg gegen die Verwendung sprechen sollte (zumindest wenn ich das privat nutze. Wenn ich das kommerziell in mein Programm einbaue, könnte das natürlich noch etwas anders sein).

Na, werde mal ein wenig forschen, ob das erlaubt ist.

Derzeit funktioniert es ganz gut, nur beim ersten Mal erhalte ich als Fehlermeldung "Die Eigenschaft " eines undefinierten oder Nullverweises kann nicht gelöscht werden" (siehe Anlage).

Bei weiteren Aufrufen (ich zerstöre das Formular nicht, sondern lasse es im Hintergrund leben), kommt der Fehler dann nicht mehr. Eine Idee, woran das liegen könnte?

blondervolker 23. Mär 2015 09:02

AW: Texte mit Google übersetzen
 
Morgen,Morgen,

bei Meldungen habe ich:

Delphi-Quellcode:
Webbrowser1.Silent := true;

himitsu 23. Mär 2015 09:08

AW: Texte mit Google übersetzen
 
Nein, es ist natürlich nicht erlaubt, die Webseite für automatische Übersetzungen zu benutzen.
Google blendet sogar ein Captcha ein, wenn deren Heuristik die Verwendung eines "Bots" vermutet.
https://cloud.google.com/translate/

PS: Bezüglich einer stetigen Veränderung und TWebBrowser: http://www.delphipraxis.net/184324-d...s-browser.html

Harry Stahl 23. Mär 2015 09:12

AW: Texte mit Google übersetzen
 
Super, Silent unterdrückt die Meldung.

Kann man hier auch irgendwie die Übergabe von Leerzeilen berücksichtigen? Wenn ich per Drag und Drop zum Browser rüberziehe, bleiben die natürlich auch bei der Übersetzung erhalten. Aber wie übergibt man die Zeile mit Leerzeilen an den Browser (Webrwoser.navivate (URL))?

himitsu 23. Mär 2015 09:27

AW: Texte mit Google übersetzen
 
In der REST-API ist eigentlich gut beschrieben, wie sowas geht. :stupid:
https://cloud.google.com/translate/v2/using_rest

http://www.delphipraxis.net/156589-d...te-api-v1.html
http://www.delphipraxis.net/156494-u...bs-delphi.html

Harry Stahl 23. Mär 2015 10:05

AW: Texte mit Google übersetzen
 
Danke. Habe hier leider bei den Übergabeparametern keinen Eintrag für Zeilenumbruch bei normalen Text gefunden. Alternativ könnte man überlegen, den Text als HTML-Text zu übergeben (dann müsste man "?Format=html" oder ähnliches in der Übergabezeile ergänzen.

Harry Stahl 23. Mär 2015 10:13

AW: Texte mit Google übersetzen
 
WorkAround: Die Zeilenschaltungen durch <br> ersetzen, übersetzen lassen und vor dem Einfügen des übersetzten Textes die <br> wieder durch Zeilenschaltungen ersetzen.

Sir Rufo 23. Mär 2015 10:17

AW: Texte mit Google übersetzen
 
Zitat:

Zitat von Harry Stahl (Beitrag 1294475)
WorkAround: Die Zeilenschaltungen durch <br> ersetzen, übersetzen lassen und vor dem Einfügen des übersetzten Textes die <br> wieder durch Zeilenschaltungen ersetzen.

Hilft dir der Link hier evtl. weiter?
http://meyerweb.com/eric/tools/dencoder/

Harry Stahl 23. Mär 2015 10:40

AW: Texte mit Google übersetzen
 
Super! "%0A" war der Ersatz für einen neuen Absatz, funktioniert jetzt alles perfekt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz