You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
2.6 KiB
Go

package main
import (
"context"
"encoding/json"
"fmt"
"log"
"net/http"
translate "cloud.google.com/go/translate/apiv3"
"cloud.google.com/go/translate/apiv3/translatepb"
)
const project_id string = "india-translate-testing-452100"
var lang_codes []string = []string{
"hi", // Hindi
"bn", // Bengali
"mr", // Marathi
"ta", // Tamil
"te", // Telugu
"ml", // Malayalam
"kn", // Kannada
"gu", // Gujarati
"or", // Oriya
"ur", // Urdu
"lus", // Mizo
"as", // Assamese
"pa", // Punjabi
"mai", // Maithili
"mwr", // Marwari
"sat", // Santali
"ne", // Nepali
"gom", // Konkani
"tcy", // Tulu
"bho", // Bhojpuri
"doi", // Dogri
"mni-Mtei", // Manipuri
"sd", // Sindhi
"awa", // Awadhi
}
func translateText(text string, targetLang string) (result string, err error) {
return translateTextHelper(project_id, "en-US", targetLang, text)
}
func translateTextHelper(projectID string, sourceLang string, targetLang string, text string) (string, error) {
// projectID := "my-project-id"
// sourceLang := "en-US"
// targetLang := "fr"
// text := "Text you wish to translate"
// Instantiates a client
ctx := context.Background()
client, err := translate.NewTranslationClient(ctx)
if err != nil {
return "", fmt.Errorf("NewTranslationClient: %w", err)
}
defer client.Close()
// Construct request
req := &translatepb.TranslateTextRequest{
Parent: fmt.Sprintf("projects/%s/locations/global", projectID),
SourceLanguageCode: sourceLang,
TargetLanguageCode: targetLang,
MimeType: "text/plain", // Mime types: "text/plain", "text/html"
Contents: []string{text},
}
resp, err := client.TranslateText(ctx, req)
if err != nil {
return "", fmt.Errorf("TranslateText: %w", err)
}
// Display the translation for each input text provided
return resp.GetTranslations()[0].GetTranslatedText(), nil
}
func handler(w http.ResponseWriter, r *http.Request) {
queries := r.URL.Query()
toTranslate := queries["query"][0]
langToTranslation := make(map[string]string)
for _, lang_code := range lang_codes {
translation, err := translateText(toTranslate, lang_code)
if err != nil {
panic(err)
}
langToTranslation[lang_code] = translation
}
langToTranslationJson, _ := json.Marshal(langToTranslation)
fmt.Fprintf(w, "%v", string(langToTranslationJson))
// fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":9090", nil))
}