Deepl Übersetzer Tool

...für und mit Amiga OS4

Moderator: OS4Welt-Team

Benutzeravatar
root
Beiträge: 777
Registriert: 3. Oktober 2009 11:21
Wohnort: Berlin
Hat sich bedankt: 27 Mal
Danksagung erhalten: 31 Mal
Kontaktdaten:

Deepl Übersetzer Tool

Beitrag von root »

Ahoi!
Hier werde ich nun versuchen die Programmierung des Deepl Übersetzer Tools zu veranschaulichen.

Es sind alle herzlich dazu eingeladen mit zu basteln..
Wer kein Hollywood hat kann sich dennoch an den Grafiken oder am Gui austoben.

Folgendes wird benötigt:
Hollywoodplayer - https://www.hollywood-mal.com/download/ ... _Amiga.lha
Rapagui Plugin - https://www.hollywood-mal.com/download/ ... _Amiga.lha

Zum nachschlagen:
Hollywood Doc - https://www.hollywood-mal.com/docs/html/hollywood
Rapagui Doc - https://www.hollywood-mal.com/docs/html/rapagui




Und los geht's!

Heute werden wir uns nur das Gui bauen ohne jegliche Funktionen.


Der Code für Hollywood:

Code: Alles auswählen

/* Plugins und Includes */
@REQUIRE "RapaGUI"		; Hollywood mitteilen das wir das RapaguiPlugin benötigen


/* Information über das Programm */
@APPTITLE 	"Deepl"
@APPVERSION 	"$VER: 0.01 (15.11.2021)"
@APPCOPYRIGHT 	"(c) copyright 2021 by root"
@APPAUTHOR 	"root"
@APPDESCRIPTION "Gui for deepl translations"


/* GFX */
LoadBrush(1,"Banner.png")	; Datei "Banner.png" wird als Brush 1 geladen


/* Gui aus externe XML erstellen */
moai.CreateApp(FileToString("001-Gui.xml"))	; Datei "001-Gui.xml" wird als String eingeladen und damit dann das Programm erstellt


/* Main Loop */		; Lässt das Programm in einer Endlosschleife laufen
Repeat
	WaitEvent
Forever
Ihr seht es ist sehr überschaubar.

Jetzt bauen wir uns noch die Gui zusammen.
Dazu überlegen wir uns was wir alles brauchen
- Bild
- 2x Auswahlknopf für die Sprachen
- 2x Texteingabefeld zur eingabe von Texten
- 4x Buttons copy, paste, usw.

Dazu habe ich mal ein XML Grundgerüst gebaut

Code: Alles auswählen

<application id="app">
	<window title="Hello!" height = "800">
		<vgroup frame="false" color="#ffffff">

				<label Align="left">Hello OS4 Welt!</label>

		</vgroup>
	</window>
</application>
<window/> - definiert das Programmfenster https://www.hollywood-mal.com/docs/html ... indow.html

<vgroup/> - definiert eine Gruppierung mit Elementen, diese werden dann v - vertikal oder h - horizontal angeordnet https://www.hollywood-mal.com/docs/html ... Group.html

<label/> - Einfacher Text https://www.hollywood-mal.com/docs/html ... Label.html

Nun wollen wir das Bild (Brush 1) einfügen das geht dann auch ganz einfach.
Wir entfernen die Zeile mit "<label Align="left">Hello OS4 Welt!</label>" und schreiben dafür
<image brush="1"/> - https://www.hollywood-mal.com/docs/html ... Image.html

fertig.

Jetzt möchten wir den Auswhalknopf für die verschiedenen Sprachen einbauen aber davor soll noch der Text "Source:" stehen. Also packen wir die beiden Sachen in eine Gruppe und das sieht dann so aus.

<hgroup HorizSpacing="150" padding="0">
<label Align="left">Source:</label>
<choice id="s_cycle"> https://www.hollywood-mal.com/docs/html ... hoice.html
<item>Automatic</item>
<item>Bulgarian</item>
<item>Czech</item>
<item>Danish</item>
<item>German</item>
</choice>
</hgroup>

Ihr seht es ist gar nicht so schwer....
Nu kommt noch die Texteingabe direkt darunter

<texteditor id="t_input" styled="true" nowrap="true"/> https://www.hollywood-mal.com/docs/html ... ditor.html

Zack fertig.
Der Rest sollte sich ja dann von selbst erklären :oops:
So sieht das fertige Gui Code dann aus.

Code: Alles auswählen

<application id="app">
	<window title="Deepl" id="window" height = "800">
		<vgroup frame="false" color="#ffffff">

			<image brush="1"/>
			
            <hgroup HorizSpacing="150" padding="0">
			
				<label Align="left">Source:</label>
				
                <choice id="s_cycle">
	                <item>Automatic</item>
					<item>Bulgarian</item>
					<item>Czech</item>
					<item>Danish</item>
					<item>German</item>
					<item>Greek</item>
					<item>English (GB)</item>
					<item>English (US)</item>
					<item>English</item>
					<item>Spanish</item>
					<item>Estonian</item>
					<item>Finnish</item>
					<item>French</item>
					<item>Hungarian</item>
					<item>Italian</item>
					<item>Japanese</item>
					<item>Lithuanian</item>
					<item>Latvian</item>
					<item>Dutch</item>
					<item>Polish</item>
					<item>Portuguese (PT)</item>
					<item>Portuguese (BR)</item>
					<item>Portuguese</item>
					<item>Romanian</item>
					<item>Russian</item>
					<item>Slovak</item>
					<item>Slovenian</item>
					<item>Swedish</item>
					<item>Chinese</item>
				</choice>

			</hgroup>

            <texteditor id="t_input" styled="true" nowrap="true"/>

            <vspace height="5"/>

		    <hgroup HorizSpacing="120" padding="0">

				<label Align="left">Destination:</label>

                <choice id="d_cycle" Active="3">
					<item>Bulgarian</item>
					<item>Czech</item>
					<item>Danish</item>
					<item>German</item>
					<item>Greek</item>
					<item>English (GB)</item>
					<item>English (US)</item>
					<item>English</item>
					<item>Spanish</item>
					<item>Estonian</item>
					<item>Finnish</item>
					<item>French</item>
					<item>Hungarian</item>
					<item>Italian</item>
					<item>Japanese</item>
					<item>Lithuanian</item>
					<item>Latvian</item>
					<item>Dutch</item>
					<item>Polish</item>
					<item>Portuguese (PT)</item>
					<item>Portuguese (BR)</item>
					<item>Portuguese</item>
					<item>Romanian</item>
					<item>Russian</item>
					<item>Slovak</item>
					<item>Slovenian</item>
					<item>Swedish</item>
					<item>Chinese</item>
				</choice>

			</hgroup>

            <texteditor id="t_output" styled="true" nowrap="true"/>

        <vspace height="5"/>

		<hgroup HorizSpacing="10">
        	<button id="b_copy">Copy</button>
	        <button id="b_paste">Paste</button>
    	    <button id="b_swap">Swap</button>
        	<button id="b_translate">Translate</button>
		</hgroup>

	</vgroup>
</window>
</application>


Da das XML File extern geladen wird kann sich jeder daran vergehen :thinking:

Im Anhang findet ihr das komplette Paket bestehend aus.
*.hws - der Code für Hollywood
*.hwa - fertiges Hollywood Applet ausführbar mit dem Hollywoodplayer
*.xml - Gui Code
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
X5000 E5500 | 4GB Ram | Radeon R9 270 Windforce | TerraTec 512i :thinking:
Benutzeravatar
TearsOfMe
Beiträge: 1198
Registriert: 29. Dezember 2013 19:27
Wohnort: Bad Marienberg
Hat sich bedankt: 28 Mal
Danksagung erhalten: 2 Mal

Re: Deepl Übersetzer Tool

Beitrag von TearsOfMe »

Finde so ein Tutorial schön. Bekomme langsam wieder mal Lust was neues anzufangen. :)
Still speaks the silence, it speaks in riddles to my mind
And time keeps passing by as I walk tearful through this life.
Tarja i miss you so much. Farewell my baby.
Benutzeravatar
root
Beiträge: 777
Registriert: 3. Oktober 2009 11:21
Wohnort: Berlin
Hat sich bedankt: 27 Mal
Danksagung erhalten: 31 Mal
Kontaktdaten:

Re: Deepl Übersetzer Tool

Beitrag von root »

So heute bringen wir mal etwas Bums in die Bude und belegen unsere Buttons mit Funktionen :D

Wir öffnen also unseren angenehm überschaubaren Hollywood Code und fügen folgendes Zeile über unseren Main Loop hinzu

Code: Alles auswählen

InstallEventHandler({RapaGUI = p_evntfunction})
Dieser Befehl bewirkt das bei allen möglichen Aktivitäten die von der RapaGui ausgehen eine Funktion namens "p_evntfunction"
ausgeführt wird. Siehe auch: https://www.hollywood-mal.com/docs/html ... ndler.html

Die Funktion erstellen wir auch gleich im Anschluss mit

Code: Alles auswählen

Function p_evntfunction(msg)

EndFunction
msg - in den Klammern bedeutet das beim Aufrufen der Funktion Daten mitgegeben werden können.
Hier zum nach lesen https://www.hollywood-mal.com/docs/html ... tions.html

In unserem Fall ist es eine ganze Tabelle voller Informationen die wir da bekommen.
Beim drücken eines Buttons werden folgende Werte übergeben
msg.action, msg.attribute, msg.id

Nun schreiben brauchen wir nur ein bissel low coode mit IF und Else https://www.hollywood-mal.com/docs/html ... PrgIf.html und fragen die Werte ab.

Code: Alles auswählen

Function p_evntfunction(msg)
If msg.action = "RapaGUI"
	If msg.attribute = "Pressed"
		If msg.id = "b_copy" then end()
	EndIf
EndIf
EndFunction
Bohr ist das mal wieder einfach heute :D
Wenn man jetzt den Button "Copy" anklickt sollte sich das Programm beenden.
Der Wert msg.id = "b_copy" ist übrigens der Wert aus unserer XML Datei.

OK nu benötigen wir die anderen Butttons auch noch. tipp tipp tipp

Code: Alles auswählen

/* Rapa Gui Events */
Function p_evntfunction(msg)
If msg.action = "RapaGUI"
	If msg.attribute = "Pressed"
		If msg.id = "b_copy"
			p_copy
		ElseIf msg.id = "b_paste"
			p_paste
		ElseIf msg.id = "b_swap"
			p_swap
		ElseIf msg.id = "b_translate"
			p_translate
		EndIf
	EndIf
EndIf
EndFunction
Tada! So nun ruft jeder Button eine weitere Funktion auf aber die gibt es erst beim nächsten mal.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
X5000 E5500 | 4GB Ram | Radeon R9 270 Windforce | TerraTec 512i :thinking:
Benutzeravatar
HelmutH
OS4Welt-Team
Beiträge: 2610
Registriert: 28. September 2009 10:56
Wohnort: Oberhausen
Hat sich bedankt: 35 Mal
Danksagung erhalten: 44 Mal

Re: Deepl Übersetzer Tool

Beitrag von HelmutH »

Klasse root :!: :thumbsup:
Mal schaun ob ich durch dein Tutorial doch nochmal Hollywood verstehen lerne. :wink:
Gruß Helmut
Amiga 500, Amiga 2000, AmigaOne XE, AmigaOne X5000
Benutzeravatar
root
Beiträge: 777
Registriert: 3. Oktober 2009 11:21
Wohnort: Berlin
Hat sich bedankt: 27 Mal
Danksagung erhalten: 31 Mal
Kontaktdaten:

Re: Deepl Übersetzer Tool

Beitrag von root »

Tach auch.
Heute wird's einfach mit nicht mal 25 Zeilen gibt es drei neue Funktionen!
1. Den übersetzten Text in die Zwischenablage kopieren
2. Text aus der Zwischenablage zum übersetzen einfügen
3. Texte aus beiden Textfeldern vertauschen


So für den Button "Copy" die erste Funktion.
Eine Funktion beginnt mit "Function" gefolgten vom Namen der Funktion und endet mit "Endfunction".

Code: Alles auswählen

/* Schiebt den übersetzten text in die Zwischenablage */
Function p_copy()

EndFunction
;)

Nun müssen wir uns aus unserem "unterem" Textfeld dort wo später der übersetzte Text steht den Text herraus ziehen.
Dazu müssen wir wissen welche ID dieser hat. Ein Blick in die XML Datei, aha " id="t_output" "
Mit dem Befehl moai.Get() können wir Inhalte von RapaGui abfragen. https://www.hollywood-mal.com/docs/html ... aiGet.html

Code: Alles auswählen

text$ = moai.Get("t_output","text")
Mit dieser Zeile ziehen wir uns den Inhalt aus dem Texteditor unten in die Variable "text$" .
Damit wir nur dann Text in die Zwischenablage ziehen wenn auch Text da ist.
Starten wir eine abfrage wie Lang der Text String in text$ eigentlich ist.
Wenn dieser dann länger als 0 ist kopieren wir diesen in die Zwischenablage.

Code: Alles auswählen

If StrLen(text$) > 0 Then SetClipboard(#CLIPBOARD_TEXT,text$)
Textlänge abfragen mit
Strlen() https://www.hollywood-mal.com/docs/html ... trLen.html
Text in die Zwischenablage kopieren mit.
SetClipboard() https://www.hollywood-mal.com/docs/html ... board.html

Zack fertig.

Code: Alles auswählen

/* Schiebt den übersetzten text in die Zwischenablage */
Function p_copy()
text$ = moai.Get("t_output","text")
If StrLen(text$) > 0 Then SetClipboard(#CLIPBOARD_TEXT,text$)
EndFunction

So für den Button "Paste" die zweite Funktion.
Wie schon bei 1. eine Funktion erstellen diesmal mit dem Namen "p_paste" und los gehts.
Bevor wir Sachen aus unserer Zwischenablage irgendwo einfügen müssen wir sicher stellen das da auch Text enthalten ist und nicht ein Bild. Dies geht mit dem Befehl PeekClipboard() https://www.hollywood-mal.com/docs/html ... board.html .
Wenn da nun Text enthalten ist gibt es die Antwort "#CLIPBOARD_TEXT", prima.
Die Daten aus der Zwischenablage ziehen wir uns dann mit "GetClipboard()" https://www.hollywood-mal.com/docs/html/hollywood/ .
Der Befehl gibt uns zwei Werte zurück.
1. die Art der Daten Text/Bild/Unbek./Leer -> type$
2. die Daten selbst --> text$

Nun haben wir den Text in Variable text$ und brauchen diesen nur noch in unser RapaGui Textfeld schreiben.
Das geschieht mit moai.Set() https://www.hollywood-mal.com/docs/html ... aiSet.html

Zack auch fertig.

Code: Alles auswählen

/* Fügt die Zwischenablage als Source Text ein */
Function p_paste()
If PeekClipboard() = #CLIPBOARD_TEXT
    type$, text$ = GetClipboard()
    moai.Set("t_input","text",text$)
EndIf
EndFunction


Halt Stop! Capt. LowCode geht das nicht auch einfacher?
Natürlich, Natürlich!!
Wir können uns auch ca. 0,03kb sparen wenn wir hier etwas optimieren



.... ca. 2h später

Zack fertig.

Code: Alles auswählen

/* Fügt die Zwischenablage als Source Text ein */
Function p_paste()
type$, text$ = GetClipboard()
If type$ = #CLIPBOARD_TEXT Then moai.Set("t_input","text",text$)
EndFunction
o_O

Hui! Aufgehts dritte Funktion, die Texte vertauschen.
Oh mann jetzt wird's schwer. :o

Wenn ihr etwas aufgepasst habt dann habt ihr auch alle Sachen gelernt die ihr dazu benötigt.
Ich bin gespannt wer es hinbekommt und es geht hier erst weiter wenn es jemand hinbekommt!
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
X5000 E5500 | 4GB Ram | Radeon R9 270 Windforce | TerraTec 512i :thinking:
Benutzeravatar
TearsOfMe
Beiträge: 1198
Registriert: 29. Dezember 2013 19:27
Wohnort: Bad Marienberg
Hat sich bedankt: 28 Mal
Danksagung erhalten: 2 Mal

Re: Deepl Übersetzer Tool

Beitrag von TearsOfMe »

So hab mal geschaut. Gibt ja wahrscheinlich mehr als eine Möglichkeit das umzusetzen aber so sieht es bei mir aus:

/* Tauscht Source mit Target Text */
Function p_swap()
local outputtext$ = moai.Get("t_output","text")
local inputtext$ = moai.Get("t_input","text")
moai.Set("t_output", "text",inputtext$)
moai.Set("t_input", "text", outputtext$)
EndFunction

P.S.: Die 003-Gui.hws muss noch auf den aktuellen Stand gebracht werden.
Still speaks the silence, it speaks in riddles to my mind
And time keeps passing by as I walk tearful through this life.
Tarja i miss you so much. Farewell my baby.
Benutzeravatar
root
Beiträge: 777
Registriert: 3. Oktober 2009 11:21
Wohnort: Berlin
Hat sich bedankt: 27 Mal
Danksagung erhalten: 31 Mal
Kontaktdaten:

Re: Deepl Übersetzer Tool

Beitrag von root »

Moin moin°!! :party:

Diesmal wird's wild.. heute nehmen wir Kontakt mit Deepl auf damit das möglich ist muss mann sich bei Deepl.com registrieren und authentifizieren am besten geht das mit einer Kreditkarte, Kosten fallen dabei nicht an.

Dann entscheidet man sich für ein Paket in meinem Fall habe ich mich für DeepL API Free entschieden das bietet:
- Zugriff auf die DeepL REST API
- Max. ‪500.000‬ Zeichen / Monat
- Zugang zu allen Funktionen
- Upgrade auf Pro jederzeit möglich
Hat man das alles überstanden findet ihr in eurem Konto einen Authentifizierungsschlüssel für die DeepL-API.
Dieser endet mit ":fx".

Zur Kommunikation mit dem Deepl Server habe ich mich für das Kommandline Tool Curl entschieden.
Das findet ihr hier http://os4depot.net/?function=showfile& ... c/curl.lha.
Man kann dies auch mit dem Hollywood Plugin hURL https://www.hollywood-mal.com/download/hURL_Amiga.lha realisieren aber ich denke das der Umgang mit Curl auch anderen von Nutzen sein kann und evtl auch insperierent :klatsch:.

Nachdem ihr nun Curl runter geladen, entpackt und in euer c: Verzeichnis geschoben habt öffnen wir eine Shell und starten einen ersten Versuch und fragen mal ab wie viele Zeichen wir noch mit unserem Free Paket übersetzen dürfen.
Wie das geht steht in der API von Deepl https://www.deepl.com/docs-api
Der Shell Befehl lautet also:

Code: Alles auswählen

curl -H "Authorization: DeepL-Auth-Key f806485b-d399-5527-6570-a82575998832:fx" https://api-free.deepl.com/v2/usage
Die Antwort sollte dann eine String im JSON Format sein. https://de.wikipedia.org/wiki/JavaScrip ... t_Notation

Code: Alles auswählen

{"character_count":2577,"character_limit":500000}
Wohw cool hu hu hu.
Es wurden also schon 2577 von 500000 verbraucht.

OK, nun übersetzten wir uns mal einen einfachen Satz ins englische.

Code: Alles auswählen

c:curl -dauth_key=f806485b-d399-5527-6570-a82575998832:fx "-dtext=Hallo! Wie geht es euch?" -dtarget_lang=EN https://api-free.deepl.com/v2/translate
Die Antwort lautet diesmal.

Code: Alles auswählen

{"translations":[{"detected_source_language":"DE","text":"Hello! How are you?"}]}
easy peasy...

So, ich hoffe mein Auth-Key wird nicht zu stark beansprucht/missbraucht, bis demnächst dann werden wir dies alles in eine schnuckelige Funktion einbauen.
X5000 E5500 | 4GB Ram | Radeon R9 270 Windforce | TerraTec 512i :thinking:
Benutzeravatar
TearsOfMe
Beiträge: 1198
Registriert: 29. Dezember 2013 19:27
Wohnort: Bad Marienberg
Hat sich bedankt: 28 Mal
Danksagung erhalten: 2 Mal

Re: Deepl Übersetzer Tool

Beitrag von TearsOfMe »

Cool. Und die API ist ja mal schön einfach.
Still speaks the silence, it speaks in riddles to my mind
And time keeps passing by as I walk tearful through this life.
Tarja i miss you so much. Farewell my baby.
Benutzeravatar
root
Beiträge: 777
Registriert: 3. Oktober 2009 11:21
Wohnort: Berlin
Hat sich bedankt: 27 Mal
Danksagung erhalten: 31 Mal
Kontaktdaten:

Re: Deepl Übersetzer Tool

Beitrag von root »

Eine neue Runde, eine neue Runde....
Es geht nun endlich weiter mit unserem kleinem Tool und zwar wollen wir heute die Funktion zum übersetzen schreiben.
Zu erst holen wir unseren Text der übersetzt werden soll..

Code: Alles auswählen

txt$ = moai.Get("t_input","text")
Dann stellen wir eine IF Bedingung ob da überhaupt Text zum übersetzten drinne steht

Code: Alles auswählen

If StrLen(txt$) > 0 
Ist die Bedingung erfüllt, ermitteln wir noch die eingestellte Sprache für den Quell und Zieltext.
Diese kann man ja im Dropdownmenu aus wählen. https://www.hollywood-mal.com/docs/html ... hoice.html
Da Deepl selbst ja über die Möglichkeit verfügt die Quell-Sprache selbst zu erkennen gibt es oben ja auch die Möglichkeit "AUTO" diese müssen wir dann auch berücksichtigen.

Da in unserem XML File ja die Landessprachen aus geschrieben sind und Deepl damit nix anfangen kann legen wir uns zwei Tabellen mit Kürzeln an.

Tabellen?

Ja es gibt in Holywood ja 3 verscheidene Sorten von Variablen und zwei haben wir schon kennen gelernt

Zahlen zahl$ = 123 https://www.hollywood-mal.com/docs/html ... umber.html
Strings text$ = "123" https://www.hollywood-mal.com/docs/html ... tring.html

und nun kommt noch Tabellen hinzu

Tabelle tabe$ = {1,2,3} https://www.hollywood-mal.com/docs/html ... Table.html

Im Gegensatz zu Strings und Zahlen muss man diese erst deklarieren (Erstellen) bevor man diese nutzen kann.
Die tut man einfach mit tabe$ = {} fertig.

Ok also zwei Tabellen mit den kürzel an legen

Code: Alles auswählen

lang_o$ = {"AUTO","BG","CS","DA","DE","EL","EN-GB","EN-US","EN","ES","ET","FI","FR","HU","IT","JA","LT","LV","NL","PL","PT-PT","PT-BR","PT","RO","RU","SK","SL","SV","ZH"}
lang_u$ = {"BG","CS","DA","DE","EL","EN-GB","EN-US","EN","ES","ET","FI","FR","HU","IT","JA","LT","LV","NL","PL","PT-PT","PT-BR","PT","RO","RU","SK","SL","SV","ZH"}
Da diese nur einmal angelegt werden müssen schreiben wir die zwei Zeilen oben in unseren Code.

Nun fragen wir ab welche Ausgangssprache in den Dropdownmenus stehen

Code: Alles auswählen

lang_s$ = lang_o$[moai.Get("s_cycle","Active")]
lang_t$ = lang_u$[moai.Get("d_cycle","Active")]
Ich drösel das mal kurz auf damit ihr besser versteht was dort passiert.
Mit

Code: Alles auswählen

zahl$ = moai.Get("s_cycle","Active")
Würden wir in "zahl$" die Zahl des gerade ausgesuchten Items im Dropdown erhalten.
Automatic währe also 0 weil eine Tablle bei 0 anfängt und German dann die 4 usw.

An 4. Stelle in unserer gerade erstellten Tabelle "lang_o$" befindet sich "DE" das schieben wir für später in den String "lang_s$" mit

Code: Alles auswählen

lang_s$ = lang_o$[4]

Nun kommen wir zum eigentlichen Text da dieser ja über mehrere Zeilen verfügen kann und diese Zeilenumbrüche später ein Problem mit dem Comandline Tool Curl führen würden bauen wir uns ein kleines Workaround.

Wir schreiben den Quelltext in eine Datei und lesen anschließend diese Zeile für Zeile aus und schreiben jede Zeile in eine Tabelle.

Den Text in eine Datei schreiben.... voll easy. https://www.hollywood-mal.com/docs/html ... oFile.html

Code: Alles auswählen

StringToFile(txt$,"t:t_deepl.txt")
Nun öffnen wir die Dateil "t:t_deepl.txt" und lesen diese aus.

Code: Alles auswählen

OpenFile(1,"t:t_deepl.txt",#MODE_READ)
	t$ = ""
	While Not Eof(1)
		t$ = AddStr(t$,"\"-dtext="..ReadLine(1).."\" ")
	Wend
CloseFile(1)
Hier wird nun die Text Datei mittels "OpenFile" https://www.hollywood-mal.com/docs/html ... nFile.html als File 1 im Lese Modus geöffnet.
" t$ = "" " ist der Textstring den wir später Curl mit auf dem Weg geben

"While Not Eof(1)" https://www.hollywood-mal.com/docs/html ... d/Eof.html
So lange wir also nicht am Ende von Datei 1 angekommen sind lesen wir mit "ReadLine(1)" eine Zeile aus https://www.hollywood-mal.com/docs/html ... dLine.html
fügen diese mit "AddStr" dann zusammen https://www.hollywood-mal.com/docs/html ... ddStr.html
Ja die Zeile " t$ = AddStr(t$,"\"-dtext="..ReadLine(1).."\" ") " sieht etwas cryptisch aus macht aber nix anderes als diesen Beispieltext

Code: Alles auswählen

BBCode ausschalten
Smilies ausschalten
URLs nicht automatisch verlinken
Signatur anhängen (die Signatur kann im persönlichen Bereich geändert werden)
Mich benachrichtigen, sobald eine Antwort geschrieben wurde
in

Code: Alles auswählen

"-dtext= BBCode ausschalten" "-dtext=Smilies ausschalten" "-dtext=URLs nicht automatisch verlinken" "-dtext=Signatur anhängen (die Signatur kann im persönlichen Bereich geändert werden)" "-dtext=Mich benachrichtigen, sobald eine Antwort geschrieben wurde" 
umzuwandeln, toll oder?

Zeit für Curl aktion...
Da wir jetzt alles beisammen haben was wir benötigen erstellen wir uns also die Curl Komandozeile
Kleine Abfrage ob wir Automatisch übersetzen lassen oder eine Sprache vorgeben.

Code: Alles auswählen

    If lang_s$ = "AUTO"
	exe$ = "c:curl -dauth_key="..key$.." "..t$.." -dtarget_lang="..lang_t$.." "..url$.." -ot:deepl.txt -s"
    Else
	exe$ = "c:curl -dauth_key="..key$.." \"-dtext="..txt$.."\" -dsource_lang="..lang_s$.." -dtarget_lang="..lang_t$.." "..url$.." -ot:deepl.txt -s"
    EndIf
Jetzt können wir Curl starten und die Übersetzung in Empfang nehemen.
Da der komplette Zeilenbefehl ja nun in "exe$" steht führen wir diesen mit "Execute(exe$)" aus https://www.hollywood-mal.com/docs/html ... ecute.html
Da der Befehl "Execute()" syncron arbeitet, sprich dein Programm wartet bis Curl fertig ist müssen wir nichts weiter machen.

Dank "-s" sehen wir auch nichts von Curl und dank "-ot:deepl.txt" befindet sich nachdem Curl fertig ist der übersetzte Text vonn Deepl in "t:deepl.txt".

Die Text Datei "t:deepl.txt" laden wir als String ein splitten ihn in eine Tabelle und arbeiten jeden Eintrag auf da es ja im JSON Format ist fliegen ein paar Sachen raus und fertig ist der übersetzte Text.

Code: Alles auswählen

; Rückgabe auf erfolgreicher Übersetzung überprüfen und Text ausgeben
    If MidStr(s$,2,12) = "translations"
	t$ = {}
	c$ = ""
	s$ = ReplaceStr(ReplaceStr(s$,"{\"translations\":[{\"",""),"\"}]}","")
	t$, c$ =SplitStr(s$,"\"},{\"",False)
	For Local i = 0 To c$ -1 Do moai.DoMethod("t_output","Insert",UnrightStr(t$[i],39).."\n","Bottom")
    ElseIf MidStr(s$,2,8) = "message"
	moai.Set("t_output","text","Value for 'target_lang' not supported.")
    Else
	moai.Set("t_output","text","Sorry! But something is wrong here!")
    EndIf
:retro:
X5000 E5500 | 4GB Ram | Radeon R9 270 Windforce | TerraTec 512i :thinking:
Benutzeravatar
AntonP
Beiträge: 696
Registriert: 11. November 2013 20:40
Hat sich bedankt: 24 Mal
Danksagung erhalten: 12 Mal

Re: Deepl Übersetzer Tool

Beitrag von AntonP »

Cooles Projekt!
AmigaOne X5000/40, 2.2 Ghz, 4 GB RAM, 240 GB SSD, Radeon R9 280X, ESI Juli@ PCI-Soundkarte, SIL3512 SATA-PCI-Karte
Antworten