Google Translate με Go

Πρόσφατα χρειάστηκα να μεταφράζω από αγγλικά σε ελληνικά διάφορα κείμενα, τα οποία γίνονται parse από κάποιο ξενόγλωσσο site. Για να το κάνω αυτό έγραψα ένα μικρό προγραμματάκι σε Go, το οποίο θα μπορούσε άνετα να στηθεί σαν μία serverless function.

Προεργασία

  1. Φτιάξτε account στο Google GCP Cloud
  2. Φτιάξτε ένα Project
  3. Ενεργοποιήστε το Billing για το Project σας.
  4. Προσθέστε το Cloud Translation API στο Project σας.
  5. Φτιάξτε ένα Service Account για το Project σας, έτσι ώστε να έχετε προγραμματιστική πρόσβαση σε αυτό.

Οταν κάνετε το Βήμα 5, τότε θα κατεβάσει ο browser σας ένα json αρχείο το οποίο θα περιέχει τα σχετικά κλειδιά για το authentication. Δώστε στο τερματικό:

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/ΒΑΛΕ_ΤΟ_ΔΙΚΟ_ΣΟΥ.json"

Το πρόγραμμα

main.go

package main

import (
	"context"
	"fmt"

	"cloud.google.com/go/translate"
	"golang.org/x/text/language"
)

// TextToGreek translates given text in Greek and returns an error
func TextToGreek(text string) (string, error) {
	targetLanguage := "el" // https://github.com/libyal/libfwnt/wiki/Language-Code-identifiers
	ctx := context.Background()

	lang, err := language.Parse(targetLanguage)
	if err != nil {
		return "", fmt.Errorf("language.Parse: %v", err)
	}

	client, err := translate.NewClient(ctx)
	if err != nil {
		return "", err
	}
	defer client.Close()

	resp, err := client.Translate(ctx, []string{text}, lang, nil)
	if err != nil {
		return "", fmt.Errorf("Translate: %v", err)
	}
	if len(resp) == 0 {
		return "", fmt.Errorf("Translate returned empty response to text: %s", text)
	}
	return resp[0].Text, nil
}

func main() {
	text := "Translate this text"
	translatedText, err := TextToGreek(text)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(translatedText)
}

Output:

$ go run main.go
Μεταφράστε αυτό το κείμενο
3 Likes

ευχαριστουμε

παντως, ενημερωτικα για οποιον δεν το εχει προσεξει, για αυτο →

υπαρχει ηδη στα αποθετηρια (των περισσοτερων διανομων λογικα) το translate-shell που επισης δουλευει στο τερματικο. Ετσι για να μεταφρασουμε απο τα αγγλικα (και οχι μονο) στα ελληνικα δινουμε την εντολη
trans -t el 'Το κειμενο που θελουμε να μεταφρασουμε'

1 Like