如何使用 Golang 使用 Google Translate API 翻譯文本?
您是否想過如何開發(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í)行后端代碼。
現(xiàn)在我們將使用此命令創(chuàng)建一個(gè)項(xiàng)目
RapidAPI 中心設(shè)置
現(xiàn)在在這個(gè)網(wǎng)站上RapidAPI Hub并創(chuàng)建一個(gè)帳戶。如果您已經(jīng)登錄,那么只需登錄即可。
在搜索 API 文本框中,搜索 Google 翻譯。您將被重定向到Google Translate API 文檔。
此外,單擊“訂閱測(cè)試”按鈕。您將看到如下所示的定價(jià)圖表。
現(xiàn)在,訂閱每月 0.00 美元的基本計(jì)劃。不要選擇花錢的計(jì)劃。
您現(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)是這樣的:
在 helpers.go 文件中,我們將創(chuàng)建一個(gè)名為 ReqBody 的結(jié)構(gòu)。
// helpers.go
類型 ReqBody 結(jié)構(gòu) {
SourceLang 字符串 `json:"sourceLang"`
TargetLang 字符串 `json:"targetLang"`
SourceText 字符串 `json:"sourceText"`}
將 Google 翻譯 URL 定義為常量值。我們會(huì)將請(qǐng)求發(fā)送到此 URL。
您是否正在尋找 Golang 專家來了解您的項(xiàng)目需求以準(zhǔn)確滿足這些需求?
拯救空缺!我們了解您的項(xiàng)目的重要性。相信我們!立即聯(lián)系 Bacancy 并聘請(qǐng)具有高問題解決能力和架構(gòu)知識(shí)的Golang 開發(fā)人員。
服務(wù)器端邏輯
打開helpers.go文件并使用以下代碼。
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ù)載。
變量 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。
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ò)誤消息。
延遲 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 文件中提供的所有語言。
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ù)。
類型 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。
變量響應(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 將從谷歌翻譯中獲取所有語言。
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ò)誤。
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ò)誤(如果有)的字符串片段。
將文本從源語言翻譯成目標(biāo)語言。
下面的 API 用于將翻譯后的數(shù)據(jù)發(fā)送到客戶端。為此,下面的輔助函數(shù)“ ReqTranslate ”將返回翻譯后的文本和錯(cuò)誤(如果有)。
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ù)器,如下所示。
包主進(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”文件夾。
安裝依賴
我們需要使用 bootstrap 來設(shè)計(jì)我們的組件。通過以下命令,我們可以將 bootstrap 添加為 npm 依賴項(xiàng)并使用“react-bootstrap”類。
建立用戶界面
App.js文件看起來像這樣來構(gòu)建用戶界面。
<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ù)獲取語言。
異步函數(shù) getAllLanguages() {
const response = await fetch(`http://localhost:8080/getalllanguages`, {
方法:'獲取',
標(biāo)頭:{'Content-Type':'application/json'},
})
返回等待 response.json();}
使用 useState 聲明本地狀態(tài)和設(shè)置方法。
借助 useEffect() 掛鉤,通過“getAllLanguages()”調(diào)用上述 API,如下所示。
創(chuàng)建一個(gè)名為“form”的對(duì)象,將其用作有效負(fù)載,并創(chuàng)建一個(gè)函數(shù) handleTranslate() 來調(diào)用翻譯 API。
翻譯 API 需要源語言、目標(biāo)語言和源文本。
源語言是您要翻譯的語言。文本用戶想要翻譯。
目標(biāo)語言是您希望翻譯輸出的語言。
異步函數(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)。
在onChange事件上調(diào)用上述函數(shù),如下所示。
<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()翻譯源文本。
運(yùn)行應(yīng)用程序
現(xiàn)在,在服務(wù)器文件夾中通過運(yùn)行以下命令啟動(dòng)后端文件夾。它將在端口號(hào)上啟動(dòng)服務(wù)器
這將在端口號(hào) 8080 上啟動(dòng)服務(wù)器。對(duì)于前端,我們需要運(yùn)行命令。
要啟動(dòng)前端服務(wù)器,我們的應(yīng)用程序?qū)⒃?URL http://localhost:3000上。我們的前端界面將如下所示。
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)系我們。