gT() - Google Translate

Veröffentliche deine funktionierenden Skripte und Funktionen

Moderator: jNizM

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

gT() - Google Translate

Post by BoBo » 11 Feb 2021, 14:40

Moin,
kleines Modul zu @teadrinker's :arrow: GoogleTranslate()-function.
Google limitiert das kostenlose Web-Übersetzungstool auf 5ooo Zeichen pro Eingabe.
Deshalb zerlegt das Script den gewünschten Text in Blöcke. Ein- und Ausgabe (Textdateien/Zwischenablage) wie im Code beschrieben.
Übersetzt hier von Englisch ('en') nach Deutsch ('de'). Check :arrow: GoogleTranslate() for further details ;)
Etwaige Fehler abzufangen bleibt (vorerst) Mangelware :shh:

Code: Select all

SetWorkingDir,% A_ScriptDir  
#Include GoogleTranslate().ahk										; Download: https://www.autohotkey.com/boards/viewtopic.php?t=63835 by teadrinker

; gT("input.txt","output.txt")										; eingabe aus datei, ausgabe in datei
; gT("input.txt")													; eingabe aus datei, ausgabe in zwischenablage
; gT()																; eingabe aus zwischenablage, ausgabe in zwischenablage

gT(inFile:="",outFile:="") {
	content := (inFile != "") ? fRead(inFile) : clip()				; auslesen der datei, oder CTRL+C in zwischenablage
	chars := StrSplit(content)										; content in einzelne Zeichen zerlegen
	Loop % chars.count() {
		if	(mod(A_Index,5000) = 0 || A_Index = chars.count()) {	; sobald textblock 5K zeichen erreicht, oder Anzahl restzeichen enthält ...
			trl .= GoogleTranslate(str,"en","de")					; textblock-übergabe an Google-Translate. Ergebnis konkatenieren.
			str:=""													; textblock leeren
			}
		Else 
			str .= chars[A_Index]									; textblock befüllen
		}
	SoundBeep														; feierabendbiersignalindikator
	Return clipboard := (outFile != "") ? fWrite(outFile,trl) : trl	; schreiben in datei, oder ausgabe in zwischenablage
	}


clip() {
	Send ^c
	ClipWait
	Return clipboard
	}
fRead(inFile) {
	FileRead, content,% inFile
	Return content
	}
fWrite(outFile,trl) {
	response := (trl = "") ? "Translation failed" : "File created." 
	FileAppend,% trl,% outFile, UTF-8								; https://www.autohotkey.com/docs/commands/FileEncoding.htm
	Return response
	} 

FAQ

Tags: Google Translate translation transcription language
User avatar
Frosti
Posts: 426
Joined: 27 Oct 2017, 14:30
Contact:

Re: gT() - Google Translate

Post by Frosti » 11 Feb 2021, 16:01

Hey das ist cool, weil nützlich! :bravo:
garry
Posts: 3764
Joined: 22 Dec 2013, 12:50

Re: gT() - Google Translate

Post by garry » 11 Feb 2021, 16:18

EDIT : Benütze jetzt die Originalfunktion von user 'teadrinker' , welches ich fälschlicherweise leicht geändert hatte ( Variable 'tl1' )
da ich die Funktion falsch aufgerufen habe
Seit 2019 April habe so falsch verwendet , niemand hat mich korrigiert ....
( muss meine Skripte ändern )

@BoBo Danke , funktioniert fein ( NULL Fehler , nix auszusetzen :) )
lediglich kleine Anpassung :
Source-Sprache =auto , Destination language = variable TL1 , Fileappend= UTF-8

Note: #Include funktioniert wenn in a_scriptdir

Code: Select all

;- gTrl() - Google Translate 
;- https://www.autohotkey.com/boards/viewtopic.php?f=10&t=86797
SetWorkingDir,% A_ScriptDir  
#Include GoogleTranslate().ahk										; Download: https://www.autohotkey.com/boards/viewtopic.php?t=63835 by teadrinker
;#Include Google_Translate_Teadrinker().ahk 
F1:=a_scriptdir . "\TESLA.txt"          ;- https://www.channelnewsasia.com/news/business/elon-musk-wants-clean-power--but-tesla-s-carrying-bitcoin-s-dirty-baggage-14163026
SplitPath, F1, name, dir, ext, name_no_ext, drive
F2:=a_scriptdir . "\" . a_now . "_" . name
tl1:="nl"                                                           ;-   https://cloud.google.com/translate/docs/languages
global tl1
;--------------------------------------------------
gTrl(F1,F2)	                                                        ; eingabe aus datei, ausgabe in datei
; gTrl("youTubeTranscriptionTest.txt")								; eingabe aus datei, ausgabe in zwischenablage
; gTrl()															; eingabe aus zwischenablage, ausgabe in zwischenablage
gTrl(inFile:="",outFile:="") {
	content := (inFile != "") ? fRead(inFile) : clip()				; auslesen der datei, oder CTRL+C in zwischenablage
	chars := StrSplit(content)										; content in einzelne Zeichen zerlegen
	Loop % chars.count() {
		if	(mod(A_Index,5000) = 0 || A_Index = chars.count()) {	; sobald textblock 5K zeichen erreicht, oder Anzahl restzeichen enthält ...
			trl .= GoogleTranslate(str,"auto",TL1)					; textblock-übergabe an Google-Translate. Ergebnis konkatenieren.
			str:=""													; textblock leeren
			}
		Else 
			str .= chars[A_Index]									; textblock befüllen						; 
		}
	SoundBeep														; feierabendbiersignalindikator
	clipboard := (outFile != "") ? fWrite(outFile,trl) : trl		; schreiben in datei, oder ausgabe in zwischenablage
	}
clip() {
	Send ^c
	ClipWait
	Return clipboard
	}
fRead(inFile) {
	FileRead, content,% inFile
	Return content
	}
fWrite(outFile,trl) {
MsgBox % outFile
    trl := RegExReplace(trl, "([.!?¿:-=] )", "$1`r`n")                   ;- bei Satzende neue Linie
    trl := RegExReplace(trl, "((^)|\R)\h*(?=\R|$)(?(2)\R)")              ;- remove empty lines
	response := (trl = "") ? "Translation failed" : "File created." 
	FileAppend,% trl,% outFile,UTF-8
	Return response
	} 
;===============================================================================
Last edited by garry on 13 Feb 2021, 06:28, edited 4 times in total.
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: gT() - Google Translate

Post by BoBo » 12 Feb 2021, 06:27

@garry -
a) habe zwztl deinen Hinweis auf UTF-8 im script berücksichtigt. Merci :thumbup:
b) bei umfangreichen Funktionen bin ich ein Fan von Auslagerung in separate Datei mit anschließender Inkludierung. Merke: "Modular ist wunderbar!" :mrgreen:

8-)
garry
Posts: 3764
Joined: 22 Dec 2013, 12:50

Re: gT() - Google Translate

Post by garry » 12 Feb 2021, 07:41

EDIT : falsch , Funktion anfügen unnötig , ich habe die Funktion falsch aufgerufen , Skript oben geändert

danke BoBo , teadrinker's function habe ich angefügt wegen Variable 'tl1' ( dies im function )
im script oben kurz modified : Source language= auto, Destination language = tl1 ,, Fileappend UTF-8

hier Splittext() noch nicht berücksichtigt : ( script-3 )
https://www.autohotkey.com/boards/viewtopic.php?p=273678#p273678
;- translator from user teadrinker / with GUI
;- DropDownList to select 109 languages / save in ini-file / write translated text and input (edit-2) to logfile
;- mark text then CTRL+c / or direct input in Edit-2
Last edited by garry on 12 Feb 2021, 10:40, edited 1 time in total.
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: gT() - Google Translate

Post by BoBo » 12 Feb 2021, 07:52

@garry - schlage vor anstatt gt() aufzubohren, teadrinker's GoogleTranslate()-function direkt zu verwenden, da diese die variable Übergabe der Eingabe-/Ausgabesprache als parameter per default vorsieht. Falls die magische Grenze von 5ooo Zeichen auschlaggebend für deine Bemühungen ist - teadrinker hat dazu inzwischen eine 'chunk'-function gescripted (auf meine Anfrage hin) - siehe hier: https://www.autohotkey.com/boards/viewtopic.php?p=381405#p381405
garry
Posts: 3764
Joined: 22 Dec 2013, 12:50

Re: gT() - Google Translate

Post by garry » 12 Feb 2021, 08:18

EDIT : Fehler bei mir , ich habe teadrinker's Skript falsch aufgerufen und unnötig Variable 'tl1' in Funktion gelegt
Muss Skript oben ändern , so dass teadrinker's Original Funktion aufgerufen wird
Sollte so aufrufen : GoogleTranslate(str,"auto",TL1)



@BoBo habe nichts aufgebohrt , lediglich kleine Sachen geändert ( na ja , meine Logik ... )
teadrinker's splittext function habe ich gesehen und Du hast ein sehr gutes script dazugemacht ( dies kann ich niemals .. )

meine Idee mit GUI war zu vereinfachen ...
Ich habe im Translator von teadrinker lediglich ein GUI dazugelegt , wähle 109 Sprachen
Teadrinker hat für source=auto ( dies korrekt für mich ) , wenn ich diesen script starte , msgbox Beispiel :

EDIT : diese Bemerkung ist falsch , muss nur richtig aufrufen ... :

-1 übersetzt chinesisch auf englisch [ from := "auto", to := "en" ] ( im GUI ist Zielsprache definiert mit DDL und Uebersetzung kann jederzeit geändert werden )
-2 definiert : english>russisch ( eigentlich könnte hier 'auto' stehen statt 'en ' )

teadrinker :

Code: Select all

MsgBox, % GoogleTranslate("今日の天気はとても良いです")
MsgBox, % GoogleTranslate("Hello, World!", "en", "ru")
GoogleTranslate(str, from := "auto", to := "en")  {
;......
" Google translate von der Kommandozeile "
https://www.autohotkey.com/boards/viewtopic.php?f=9&t=86596
dies entspicht meiner script-3 ( input oder clipboard translate + logfile )
https://www.autohotkey.com/boards/viewtopic.php?p=273678#p273678
Last edited by garry on 12 Feb 2021, 10:28, edited 2 times in total.
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: gT() - Google Translate

Post by BoBo » 12 Feb 2021, 09:02

@garry - Erinnere ich richtig das du Niederländer bist? Das würde mir erklären, warum (für mich) manche Sätze leicht abgewandelt 'klingen', wodurch manchmal (unbeabsichtigterweise) eine andere/abweichende Bedeutung resultieren kann! Beispiel: "teadrinker's splittext function habe ich gesehen und Du hast ein sehr gutes script dazugemacht"
".. dazu gemacht" || ".. daraus gemacht"? Hab ich das?? :think:
Interessant, da ich mit teadrinker's SplitText()-Funktion eben noch nichts gemacht habe. Mein SplitText()-Ansatz ist reichlich vereinfacht, was mitunter fehleranfälliger sein dürfte(?!) :)
garry
Posts: 3764
Joined: 22 Dec 2013, 12:50

Re: gT() - Google Translate

Post by garry » 12 Feb 2021, 09:56

@BoBo aaarghh , nichts wörtlich nehmen , habe mich falsch ausgedrückt ...
-Erstens : Es war mein Fehler dass ich die Funktion von Teadrinker falsch aufgerufen habe ( Betr. Variable tl1 im Funktion )
werde es ändern so dass die Originalfunktion nicht im Skript enthalten ist ( #Include ) / Original Skript von 'teadrinker'

Betr. splittext : Du fragtest , man hat ein Problem dass Skript blockieren kann wegen 5K Grenze
"Feature request: split input in (to be specified) chunks allowing to pass Googles' 5K-char per session limit."
teadrinker hat eine Funktion splittext gemacht und Du hast denn eine ganz andere kurze optimale Skript gemacht für google translator , Dein Skript ist sehr übersichtlich (NULL Fehler ) und gut kommentiert

Ich muss meine falschen Skripte ändern , dass ich die Variable TL1 ( de en pt nl ... etc ) so aufrufe :
GoogleTranslate(str,"auto",TL1 )
EDIT : Skript oben geändert

und ... ich könnte alle diese Skripte niemals selber programmieren
garry
Posts: 3764
Joined: 22 Dec 2013, 12:50

Re: gT() - Google Translate

Post by garry » 13 Feb 2021, 06:25

noch eine letzte Frage wegen #Include , bei mir funktioniert dies nicht :
#Include GoogleTranslate().ahk
ich habe GoogleTranslate.ahk in %a_programfiles%\Autohotkey\LIB und dies funktioniert ohne #Include GoogleTranslate.ahk

Code: Select all

;=========================================================================
;- https://www.autohotkey.com/docs/Functions.htm#lib
;- A script may call a function in an external file WITHOUT having to use "#Include" . 
;- Note : maybe can used = #Include <googletranslate>  ( ? )
;- For this to work, a file of the same name as the function must exist in one of the following library directories:

;- %A_ScriptDir%\Lib\                                       ;- Local library - requires [v1.0.90+].
;- %A_MyDocuments%\AutoHotkey\Lib\                          ;- User library.
;- directory-of-the-currently-running-AutoHotkey.exe\Lib\   ;- Standard library.


;-RESUME:
;-GoogleTranslate.ahk  >> dies ist im Folder = %a_programfiles%\Autohotkey\LIB
;------------------------------------------------------
run,https://www.autohotkey.com/docs/Functions.htm#lib
run,%a_programfiles%\Autohotkey\LIB
msgbox, 262208,YOUR AHK-VERSION , %a_ahkversion%
return
;==========================================================================
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: gT() - Google Translate

Post by BoBo » 16 Feb 2021, 11:09

#Include GoogleTranslate().ahk Liegt bei mir im Arbeitsverzeichnis. Deshalb geht das abweichend von der sonst noch für #Include beschriebenen Vorgehensweise.
Post Reply

Return to “Skripte und Funktionen”