Skip to content
Snippets Groups Projects
Verified Commit e1c31d44 authored by Volker Schukai's avatar Volker Schukai :alien:
Browse files

chore: wip

parent c1053139
No related branches found
No related tags found
No related merge requests found
translateit
go.mod 0 → 100644
main 0 → 100755
File added
main.go 0 → 100644
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"os"
"os/exec"
"strings"
)
func GetAPIKey(filename string) (string, error) {
cmd := exec.Command("pass", filename)
output, err := cmd.Output()
if err != nil {
return "", err
}
// Entfernen Sie das Lineending (\n), falls es existiert
apiKey := strings.TrimSpace(string(output))
return apiKey, nil
}
type TranslationRequest struct {
Text []string `json:"text"`
TargetLang string `json:"target_lang"`
}
type TranslationResponse struct {
Translations []struct {
DetectedSourceLanguage string `json:"detected_source_language"`
Text string `json:"text"`
} `json:"translations"`
}
func TranslateText(inputText, targetLang, authKey string) (string, error) {
reqBody := &TranslationRequest{
Text: []string{inputText},
TargetLang: targetLang,
}
reqBodyBytes, err := json.Marshal(reqBody)
if err != nil {
return "", err
}
req, err := http.NewRequest("POST", "https://api.deepl.com/v2/translate", bytes.NewReader(reqBodyBytes))
if err != nil {
return "", err
}
req.Header.Set("Authorization", "DeepL-Auth-Key "+authKey)
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
return "", err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return "", fmt.Errorf("unexpected status: %v", resp.Status)
}
respBodyBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
var respBody TranslationResponse
if err := json.Unmarshal(respBodyBytes, &respBody); err != nil {
return "", err
}
if len(respBody.Translations) == 0 {
return "", fmt.Errorf("no translations received")
}
return respBody.Translations[0].Text, nil
}
func transalte(text string) string {
filename := "schukai/deepl-api-key"
apiKey, err := GetAPIKey(filename)
if err != nil {
return text + " (" + err.Error() + ")"
}
authKey := apiKey
sourceText := text
targetLang := "EN"
translatedText, err := TranslateText(sourceText, targetLang, authKey)
if err != nil {
return text + " (" + err.Error() + ")"
}
return translatedText
}
func main() {
args := os.Args
if len(args) < 2 {
fmt.Println("Please provide an argument")
return
}
originalText := os.Args[1]
//log.Println(originalText)
fmt.Println(transalte(originalText))
}
function! TranslateSelectedText()
let selection_mode = visualmode()
let l:translated_text = ""
if selection_mode == 'v' || selection_mode == 'V'
" zeichen- oder linienweise Auswahl
let l:current_text = getreg('"')
let l:translated_text = system(g:translateit_path . '/translateit ' . shellescape(l:current_text, 1))
elseif selection_mode == "\<C-V>"
" blockweise Auswahl
let l:current_text = getreg("x")
let l:translated_text = system(g:translateit_path . '/translateit ' . shellescape(l:current_text, 1))
end
if l:translated_text != ""
normal! gv
normal! c
execute 'normal! a' . l:translated_text
endif
endfunction
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment