如何使用 Golang 使用 Google Translate API 翻譯文本?

yanding 2023-06-05 668

您是否想過如何開發(fā)自己的翻譯器?您是否遇到過需要開發(fā)翻譯文本功能的需求?您是否正在為開發(fā)一款翻譯軟件而苦惱?那么這個(gè)關(guān)于如何使用 Golang使用 Google Translate API 翻譯文本的教程適合你!讓我們看看今天的教程涵蓋了哪些內(nèi)容。

教程目標(biāo):使用 Google Translate API 翻譯文本

  • RapidAPI Hub 的理解和實(shí)現(xiàn)

  • 翻譯文本的服務(wù)器端邏輯

  • 創(chuàng)建 API

  • 建立用戶界面

  • 源代碼:使用 Google Translate API 翻譯文本的演示應(yīng)用程序

初始設(shè)置

讓我們先從后端開始。創(chuàng)建一個(gè)名為“google-translate”的文件夾。在此文件夾中創(chuàng)建一個(gè)名為“be”的新文件夾。在此文件夾中,我們將執(zhí)行后端代碼。

如何使用 Golang 使用 Google Translate API 翻譯文本?
mkdir 谷歌翻譯mkdir 服務(wù)器

現(xiàn)在我們將使用此命令創(chuàng)建一個(gè)項(xiàng)目

如何使用 Golang 使用 Google Translate API 翻譯文本?
go mod init 翻譯

如何使用 Golang 使用 Google Translate API 翻譯文本?

RapidAPI 中心設(shè)置

現(xiàn)在在這個(gè)網(wǎng)站上RapidAPI Hub并創(chuàng)建一個(gè)帳戶。如果您已經(jīng)登錄,那么只需登錄即可。

在搜索 API 文本框中,搜索 Google 翻譯。您將被重定向到Google Translate API 文檔。

此外,單擊“訂閱測(cè)試”按鈕。您將看到如下所示的定價(jià)圖表。

如何使用 Golang 使用 Google Translate API 翻譯文本?

現(xiàn)在,訂閱每月 0.00 美元的基本計(jì)劃。不要選擇花錢的計(jì)劃。

如何使用 Golang 使用 Google Translate API 翻譯文本?

您現(xiàn)在已成功訂閱。您將獲得用于發(fā)送請(qǐng)求的“X-RapidAPI-Key” 。請(qǐng)保守秘密。

基本項(xiàng)目設(shè)置

現(xiàn)在,轉(zhuǎn)到編碼部分。我們的演示應(yīng)用程序?qū)蠖撕颓岸说膬蓚€(gè)主要文件夾,分別是服務(wù)器和客戶端。

文件夾結(jié)構(gòu)是這樣的:

如何使用 Golang 使用 Google Translate API 翻譯文本?

在 helpers.go 文件中,我們將創(chuàng)建一個(gè)名為 ReqBody 的結(jié)構(gòu)。

// helpers.go

如何使用 Golang 使用 Google Translate API 翻譯文本?
類型 ReqBody 結(jié)構(gòu) {
  SourceLang 字符串 `json:"sourceLang"`
  TargetLang 字符串 `json:"targetLang"`
  SourceText 字符串 `json:"sourceText"`}

將 Google 翻譯 URL 定義為常量值。我們會(huì)將請(qǐng)求發(fā)送到此 URL。

如何使用 Golang 使用 Google Translate API 翻譯文本?
const translateURL = "https://google-translate1.p.rapidapi.com/language/translate/v2"

您是否正在尋找 Golang 專家來了解您的項(xiàng)目需求以準(zhǔn)確滿足這些需求?
拯救空缺!我們了解您的項(xiàng)目的重要性。相信我們!立即聯(lián)系 Bacancy 并聘請(qǐng)具有高問題解決能力和架構(gòu)知識(shí)的Golang 開發(fā)人員。

服務(wù)器端邏輯

打開helpers.go文件并使用以下代碼。

如何使用 Golang 使用 Google Translate API 翻譯文本?
func ReqTranslate(body *ReqBody) ([]byte, error) {
  變量 str2 字符串
  str2 = ""
  str2 = str2 + "q=" + body.SourceText
  str2 = str2 + "&target=" + body.TargetLang
  str2 = str2 + "&source=" + body.SourceLang
  有效載荷:= strings.NewReader(str2)
  req, err := http.NewRequest("POST", translateURL, 負(fù)載)
  如果錯(cuò)誤!=無{
      返回 []byte(""), 錯(cuò)誤
  }
  req.Header.Add("content-type", "application/x-www-form-urlencoded")
  req.Header.Add("Accept-Encoding", "application/gzip")
  req.Header.Add("X-RapidAPI-Key", "")
  req.Header.Add("X-RapidAPI-Host", "google-translate1.p.rapidapi.com")
  res, 錯(cuò)誤 := http.DefaultClient.Do(req)
  如果錯(cuò)誤!=無{
      返回 []byte(""), 錯(cuò)誤
  }
  延遲 res.Body.Close()
  body1,錯(cuò)誤:= ioutil.ReadAll(res.Body)
  如果錯(cuò)誤!=無{
      返回 []byte(""), 錯(cuò)誤
  }
  延遲 res.Body.Close()
  如果 res.StatusCode == http.StatusTooManyRequests {
      return []byte(""), errors.New("請(qǐng)求太多")
  }
  返回 body1,無}

解釋

翻譯文本并生成有效負(fù)載

我們?cè)谶@里使用的 API 需要源語言、文本和目標(biāo)語言。因此,我們根據(jù)要求構(gòu)建了以下代碼。創(chuàng)建包含源語言、文本和目標(biāo)語言的負(fù)載。

如何使用 Golang 使用 Google Translate API 翻譯文本?
變量 str2 字符串
  str2 = ""
  str2 = str2 + "q=" + body.SourceText
  str2 = str2 + "&target=" + body.TargetLang
  str2 = str2 + "&source=" + body.SourceLang
  有效載荷:= strings.NewReader(str2)

創(chuàng)建一個(gè)新的 POST 請(qǐng)求

創(chuàng)建一個(gè)新的“發(fā)布”請(qǐng)求并添加標(biāo)題。您必須將< YOUR_KEY >替換為X-RapidAPI-Key。

如何使用 Golang 使用 Google Translate API 翻譯文本?
req, err := http.NewRequest("POST", translateURL, 負(fù)載)
  如果錯(cuò)誤!=無{
      返回 []byte(""), 錯(cuò)誤
  }
  req.Header.Add("content-type", "application/x-www-form-urlencoded")
  req.Header.Add("Accept-Encoding", "application/gzip")
  req.Header.Add("X-RapidAPI-Key", "")
  req.Header.Add("X-RapidAPI-Host", "google-translate1.p.rapidapi.com")
  res, 錯(cuò)誤 := http.DefaultClient.Do(req)
  如果錯(cuò)誤!=無{
      返回 []byte(""), 錯(cuò)誤
  }

傳遞響應(yīng)或錯(cuò)誤消息

以下代碼將提供響應(yīng)或錯(cuò)誤消息。

如何使用 Golang 使用 Google Translate API 翻譯文本?
延遲 res.Body.Close()
  body1,錯(cuò)誤:= ioutil.ReadAll(res.Body)
  如果錯(cuò)誤!=無{
      返回 []byte(""), 錯(cuò)誤
  }
  延遲 res.Body.Close()
  如果 res.StatusCode == http.StatusTooManyRequests {
      return []byte(""), errors.New("請(qǐng)求太多")
  }
  返回 body1,無

獲取所有語言

創(chuàng)建另一個(gè)函數(shù)以獲取 Google 翻譯在 helpers.go 文件中提供的所有語言。

如何使用 Golang 使用 Google Translate API 翻譯文本?
func GetLanguages()([]字符串,錯(cuò)誤){
  變種語言[]字符串
  網(wǎng)址:=“https://google-translate1.p.rapidapi.com/language/translate/v2/languages”
  請(qǐng)求,錯(cuò)誤:= http.NewRequest("GET", url, nil)
  如果錯(cuò)誤!=無{
      返回語言,錯(cuò)誤
  }
  req.Header.Add("Accept-Encoding", "application/gzip")
  req.Header.Add("X-RapidAPI-Key", "1f567f5ad9msh566e3bdad55c972p12adadjsnbca1e41ae0e7")
  req.Header.Add("X-RapidAPI-Host", "google-translate1.p.rapidapi.com")
  res, 錯(cuò)誤 := http.DefaultClient.Do(req)
  如果錯(cuò)誤!=無{
      fmt.Println("請(qǐng)求錯(cuò)誤", err)
  }
  延遲 res.Body.Close()
  身體,錯(cuò)誤:= ioutil.ReadAll(res.Body)
  如果錯(cuò)誤!=無{
      返回語言,錯(cuò)誤
  }
  變量響應(yīng)
  err = json.Unmarshal(正文, &rs)
  如果錯(cuò)誤!=無{
      返回語言,錯(cuò)誤
  }
  對(duì)于 _, v := 范圍 rs.Data.Languages {
      語言 = 追加(語言,訴語言)
  }
  返回語言,無}

創(chuàng)建一個(gè)結(jié)構(gòu)來解組數(shù)據(jù)

我們需要?jiǎng)?chuàng)建一個(gè)結(jié)構(gòu)來解組來自第三方 API 的數(shù)據(jù)。

如何使用 Golang 使用 Google Translate API 翻譯文本?
類型 Resp 結(jié)構(gòu) {
  數(shù)據(jù)結(jié)構(gòu){
      語言[]結(jié)構(gòu){
          語言字符串 `json:"language"`
      `json:“語言”`
  `json:“數(shù)據(jù)”`}

該函數(shù)將返回一段字符串和錯(cuò)誤,其中包含谷歌翻譯提供的所有語言。使用X-RapidAPI-Key更改YOUR_KEY。

如何使用 Golang 使用 Google Translate API 翻譯文本?
變量響應(yīng)
  err = json.Unmarshal(正文, &rs)
  如果錯(cuò)誤!=無{
      返回語言,錯(cuò)誤
  }
  對(duì)于 _, v := 范圍 rs.Data.Languages {
      語言 = 追加(語言,訴語言)
  }返回語言,無

創(chuàng)建 API

現(xiàn)在在controller/api 目錄中的api.go文件中。

我們將創(chuàng)建 2 個(gè) API
1. 從 Google 翻譯中獲取所有語言
2. 將文本從源語言翻譯成目標(biāo)語言。

從谷歌翻譯中獲取所有語言

下面的 API 將從谷歌翻譯中獲取所有語言。

如何使用 Golang 使用 Google Translate API 翻譯文本?
func GetAllLanguagesFromGoogleTranslate(w http.ResponseWriter, r *http.Request) {
  w.Header().Set("Access-Control-Allow-Origin", "http://localhost:3000")
  w.Header().Set("訪問控制允許方法", "POST, GET")
  w.Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
  語言,錯(cuò)誤 := helpers.GetLanguages()
  如果錯(cuò)誤!=無{
      w.WriteHeader(http.StatusInternalServerError)
      w.Write([]byte("內(nèi)部服務(wù)器錯(cuò)誤"))
      返回
  }
  langBytes,錯(cuò)誤:= json.Marshal(語言)
  如果錯(cuò)誤!=無{
      w.WriteHeader(http.StatusInternalServerError)
      w.Write([]byte("內(nèi)部服務(wù)器錯(cuò)誤"))
      返回
  }
  w.Write(langBytes)}

解釋

防止 CORS 錯(cuò)誤

使用下面的代碼來防止來自前端的 cors 錯(cuò)誤。

如何使用 Golang 使用 Google Translate API 翻譯文本?
   w.Header().Set("Access-Control-Allow-Origin", "http://localhost:3000")
  w.Header().Set("訪問控制允許方法", "POST, GET")
  w.Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")

下面的代碼將返回包含所有語言和錯(cuò)誤(如果有)的字符串片段。

如何使用 Golang 使用 Google Translate API 翻譯文本?
res, 錯(cuò)誤 := http.DefaultClient.Do(req)
  如果錯(cuò)誤!=無{
      fmt.Println("請(qǐng)求錯(cuò)誤", err)
  }

將文本從源語言翻譯成目標(biāo)語言。

下面的 API 用于將翻譯后的數(shù)據(jù)發(fā)送到客戶端。為此,下面的輔助函數(shù)“ ReqTranslate ”將返回翻譯后的文本和錯(cuò)誤(如果有)。

如何使用 Golang 使用 Google Translate API 翻譯文本?
func TranslateTheText(w http.ResponseWriter, r *http.Request) {
  w.Header().Set("Access-Control-Allow-Origin", "http://localhost:3000")
  w.Header().Set("訪問控制允許方法", "POST, GET")
  w.Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
  reqbody,錯(cuò)誤:= ioutil.ReadAll(r.Body)
  如果錯(cuò)誤!=無{
      fmt.Printf("讀體錯(cuò)誤: %v", err)
      w.WriteHeader(http.StatusBadRequest)
      w.Write([]byte("錯(cuò)誤請(qǐng)求"))
      返回
  }
  變種 rqBody helpers.ReqBody
  err = json.Unmarshal(reqbody, &rqBody)
  如果錯(cuò)誤!=無{
      fmt.Printf("解組正文錯(cuò)誤: %v", err)
      w.WriteHeader(http.StatusInternalServerError)
      w.Write([]byte("內(nèi)部服務(wù)器錯(cuò)誤"))
      返回
  }
  translatedText, 錯(cuò)誤 := helpers.ReqTranslate(&rqBody)
  如果錯(cuò)誤!=無{
      fmt.Println("翻譯錯(cuò)誤", err)
      w.WriteHeader(http.StatusInternalServerError)
      w.Write([]byte("內(nèi)部服務(wù)器錯(cuò)誤"))
      返回
  }
  w.Write(翻譯文本)}

現(xiàn)在,在 main.go 文件中創(chuàng)建服務(wù)器,如下所示。

如何使用 Golang 使用 Google Translate API 翻譯文本?
包主進(jìn)口 (
  “網(wǎng)絡(luò)/http”
  “翻譯/控制器/ api”)功能主要(){
  http.HandleFunc("/getalllanguages", api.GetAllLanguagesFromGoogleTranslate)
  http.HandleFunc("/translate", api.TranslateTheText)
  http.ListenAndServe(":8080", 無)}

客戶端設(shè)置和用戶界面

在“google-translate”目錄中運(yùn)行以下命令以創(chuàng)建“client”文件夾。

如何使用 Golang 使用 Google Translate API 翻譯文本?
npx create-react-app 客戶端

安裝依賴

我們需要使用 bootstrap 來設(shè)計(jì)我們的組件。通過以下命令,我們可以將 bootstrap 添加為 npm 依賴項(xiàng)并使用“react-bootstrap”類。

如何使用 Golang 使用 Google Translate API 翻譯文本?
npm 安裝 react-bootstrap bootstrap

建立用戶界面

App.js文件看起來像這樣來構(gòu)建用戶界面。

如何使用 Golang 使用 Google Translate API 翻譯文本?
<div className="m-100">
    <div className="d-flex gap-3 m-4 justify-content-around">
      <選擇
        className="表單選擇 w-50"
        aria-label="默認(rèn)選擇示例"
        名稱=“從”
        值={form.from}
        onChange={({ target }) => handleChange(target)}
      >
        {languages.map(lang => <option key={lang} value={lang}>{lang}</option>)}
      </選擇>
      <選擇
        className="表單選擇 w-50"
        aria-label="默認(rèn)選擇示例"
        名稱=“到”
        值={form.to}
        onChange={({ target }) => handleChange(target)}
      >
        {languages.map(lang => <option key={lang} value={lang}>{lang}</option>)}
      </選擇>
    </div>
    <div className="d-flex gap-3 m-4 ">
      <label>輸入要翻譯的文字:</label>
      <div className="表單浮動(dòng)">
        <文本區(qū)域
          className="表單控件"
          id="輸入文本"
          名稱=“文本”
          值={form.text}
          onChange={({ target }) => handleChange(target)}
        ></文本區(qū)域>
      </div>
      <div className="表單浮動(dòng)">
        <文本區(qū)域
          className="表單控制 ml-200"
          id="翻譯文本"
          名稱=“翻譯文本”
          值={form.traslatedText}
          onChange={({ target }) => handleChange(target)}
        ></文本區(qū)域>
      </div>
    </div>
    <分區(qū)>
      <按鈕
        類型=“按鈕”
        className="btn btn-primary mx-4"
        onClick={handleTranslate}
      >
        翻譯
      </按鈕>
    </div>
  </div>

集成 API 和存儲(chǔ)數(shù)據(jù)

使用“getAllLanguages()”函數(shù)獲取語言。

如何使用 Golang 使用 Google Translate API 翻譯文本?
異步函數(shù) getAllLanguages() {
const response = await fetch(`http://localhost:8080/getalllanguages`, {
  方法:'獲取',
  標(biāo)頭:{'Content-Type':'application/json'},
})
返回等待 response.json();}

使用 useState 聲明本地狀態(tài)和設(shè)置方法。

如何使用 Golang 使用 Google Translate API 翻譯文本?
const [語言, setLanguages] = useState([]);

借助 useEffect() 掛鉤,通過“getAllLanguages()”調(diào)用上述 API,如下所示。

如何使用 Golang 使用 Google Translate API 翻譯文本?
使用效果(()=> {
  常量數(shù)據(jù) = getAllLanguages()
  data.then(res => {
    設(shè)置語言(資源)
  })
}, []);

創(chuàng)建一個(gè)名為“form”的對(duì)象,將其用作有效負(fù)載,并創(chuàng)建一個(gè)函數(shù) handleTranslate() 來調(diào)用翻譯 API。

如何使用 Golang 使用 Google Translate API 翻譯文本?
const [表單, 設(shè)置表單] = useState({
  到: ””,
  從: ””,
  文本: ””,
  翻譯文本:“”
});

翻譯 API 需要源語言、目標(biāo)語言和源文本。

  • 源語言是您要翻譯的語言。文本用戶想要翻譯。

  • 目標(biāo)語言是您希望翻譯輸出的語言。

如何使用 Golang 使用 Google Translate API 翻譯文本?
異步函數(shù) handleTranslate() {
  常量數(shù)據(jù) = {
    sourceLang: form.from,
    targetLang: form.to,
    源文本:form.text
  }
  const response = await fetch(`http://localhost:8080/translate`, {
    方法:'POST',
    正文:JSON.stringify(數(shù)據(jù))
  })
  response.json().then(res => {
    handleChange({
      名稱:'翻譯文本',
      值:res.data.translations[0].translatedText
    })
  })
}

然后還有另一個(gè)函數(shù)可以幫助我們改變表單變量的狀態(tài)。

如何使用 Golang 使用 Google Translate API 翻譯文本?
const handleChange = ({ name, value }) => {
  設(shè)置表格({
    ...形式,
    [名稱]:值
  });
};

在onChange事件上調(diào)用上述函數(shù),如下所示。

如何使用 Golang 使用 Google Translate API 翻譯文本?
<div className="d-flex gap-3 m-4 justify-content-around">
      <選擇
        className="表單選擇 w-50"
        aria-label="默認(rèn)選擇示例"
        名稱=“從”
        值={form.from}
        onChange={({ target }) => handleChange(target)}
      >
        {languages.map(lang => <option key={lang} value={lang}>{lang}</option>)}
      </選擇>
      <選擇
        className="表單選擇 w-50"
        aria-label="默認(rèn)選擇示例"
        名稱=“到”
        值={form.to}
        onChange={({ target }) => handleChange(target)}
      >
        {languages.map(lang => <option key={lang} value={lang}>{lang}</option>)}
      </選擇>
    </div>

使用方法handleTranslate()翻譯源文本。

如何使用 Golang 使用 Google Translate API 翻譯文本?
<按鈕
  類型=“按鈕”
  className="btn btn-primary mx-4"
  onClick={handleTranslate}>
  翻譯</按鈕>

運(yùn)行應(yīng)用程序

現(xiàn)在,在服務(wù)器文件夾中通過運(yùn)行以下命令啟動(dòng)后端文件夾。它將在端口號(hào)上啟動(dòng)服務(wù)器

如何使用 Golang 使用 Google Translate API 翻譯文本?
去運(yùn)行 main.go

這將在端口號(hào) 8080 上啟動(dòng)服務(wù)器。對(duì)于前端,我們需要運(yùn)行命令。

如何使用 Golang 使用 Google Translate API 翻譯文本?
npm 開始

要啟動(dòng)前端服務(wù)器,我們的應(yīng)用程序?qū)⒃?URL http://localhost:3000上。我們的前端界面將如下所示。

如何使用 Golang 使用 Google Translate API 翻譯文本?

Github 存儲(chǔ)庫:google-translate-api-example

訪問github 存儲(chǔ)庫以克隆源代碼并試用代碼。

結(jié)論

所以這是關(guān)于如何使用 Golang 使用 Google Translate API 翻譯文本。我們希望分步指南對(duì)您有所幫助。如果您是 Golang 愛好者,請(qǐng)?jiān)L問Golang 教程以獲取基礎(chǔ)知識(shí)和高級(jí)知識(shí)。如果您有任何疑問、主題或建議,請(qǐng)聯(lián)系我們。


The End