Використовуйте існуючий проект (або створіть новий) https://console.cloud.google.com/
З проекту нам треба взяти ID (id проекта) та ключ (для отримання ключа, використовуюємо команду консолі `gcloud auth print-access-token`).
Далі використовуємо наступний код (або пишимо свій):
Логіка наступна:
1. Беремо файл source.xlsx
2. Кодуємо файл в base64
3. Відправляємо запит, отримуємо base64 переклад
4. Декодуємо base64 та зберігаємо у target_language_code + "_" + source_file_name
```
package main
import (
"encoding/base64"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"os"
"strings"
)
const source_language_code = "uk"
const target_language_code = "en"
const google_project = "{YOUR_GOOGLE_PROJECT_ID}"
const google_key = "Bearer {YOUR_GOOGLE_KEY}"
const source_file_name = "SOURCE_FILE.xlsx"
type AutoGenerated struct {
DocumentTranslation struct {
ByteStreamOutputs []string `json:"byteStreamOutputs"`
MimeType string `json:"mimeType"`
} `json:"documentTranslation"`
Model string `json:"model"`
Error struct {
Code int `json:"code"`
Message string `json:"message"`
Status string `json:"status"`
} `json:"error"`
}
func toBase64(b []byte) string {
return base64.StdEncoding.EncodeToString(b)
}
func main() {
// Read the entire file into a byte slice
bytes, err := ioutil.ReadFile(source_file_name)
if err != nil {
log.Fatal(err)
}
var base64Encoding string
// Append the base64 encoded output
base64Encoding = toBase64(bytes)
url := fmt.Sprintf("https://translation.googleapis.com/v3/projects/%s/locations/us-central1:translateDocument", google_project)
method := "POST"
payload := strings.NewReader(`{
"source_language_code": "` + source_language_code + `",
"target_language_code": "` + target_language_code + `",
"document_input_config": {
"mimeType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"content": "` + base64Encoding + `"
},
"isTranslateNativePdfOnly": true
}`)
client := &http.Client{}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("x-goog-user-project", google_project)
req.Header.Add("Content-Type", "application/json; charset=utf-8")
req.Header.Add("Authorization", google_key)
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
data := AutoGenerated{}
err2 := json.Unmarshal(body, &data)
if err2 != nil {
log.Fatal(err2)
}
if data.Error.Code > 0 {
log.Fatal(data.Error.Message)
}
dec, err := base64.StdEncoding.DecodeString(data.DocumentTranslation.ByteStreamOutputs[0])
if err != nil {
panic(err)
}
f, err := os.Create(target_language_code + "_" + source_file_name)
if err != nil {
panic(err)
}
defer f.Close()
if _, err := f.Write(dec); err != nil {
panic(err)
}
if err := f.Sync(); err != nil {
panic(err)
}
}
```