如何使用 Golang 使用 Google Translate API 翻译文本?
您是否想过如何开发自己的翻译器?您是否遇到过需要开发翻译文本功能的需求?您是否正在为开发一款翻译软件而苦恼?那么这个关于如何使用 Golang使用 Google Translate API 翻译文本的教程适合你!让我们看看今天的教程涵盖了哪些内容。
教程目标:使用 Google Translate API 翻译文本
RapidAPI Hub 的理解和实现
翻译文本的服务器端逻辑
创建 API
建立用户界面
源代码:使用 Google Translate API 翻译文本的演示应用程序
初始设置
让我们先从后端开始。创建一个名为“google-translate”的文件夹。在此文件夹中创建一个名为“be”的新文件夹。在此文件夹中,我们将执行后端代码。
现在我们将使用此命令创建一个项目
RapidAPI 中心设置
现在在这个网站上RapidAPI Hub并创建一个帐户。如果您已经登录,那么只需登录即可。
在搜索 API 文本框中,搜索 Google 翻译。您将被重定向到Google Translate API 文档。
此外,单击“订阅测试”按钮。您将看到如下所示的定价图表。
现在,订阅每月 0.00 美元的基本计划。不要选择花钱的计划。
您现在已成功订阅。您将获得用于发送请求的“X-RapidAPI-Key” 。请保守秘密。
基本项目设置
现在,转到编码部分。我们的演示应用程序将包含后端和前端的两个主要文件夹,分别是服务器和客户端。
文件夹结构是这样的:
在 helpers.go 文件中,我们将创建一个名为 ReqBody 的结构。
// helpers.go
类型 ReqBody 结构 {
SourceLang 字符串 `json:"sourceLang"`
TargetLang 字符串 `json:"targetLang"`
SourceText 字符串 `json:"sourceText"`}
将 Google 翻译 URL 定义为常量值。我们会将请求发送到此 URL。
您是否正在寻找 Golang 专家来了解您的项目需求以准确满足这些需求?
拯救空缺!我们了解您的项目的重要性。相信我们!立即联系 Bacancy 并聘请具有高问题解决能力和架构知识的Golang 开发人员。
服务器端逻辑
打开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, 负载)
如果错误!=无{
返回 []byte(""), 错误
}
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, 错误 := http.DefaultClient.Do(req)
如果错误!=无{
返回 []byte(""), 错误
}
延迟 res.Body.Close()
body1,错误:= ioutil.ReadAll(res.Body)
如果错误!=无{
返回 []byte(""), 错误
}
延迟 res.Body.Close()
如果 res.StatusCode == http.StatusTooManyRequests {
return []byte(""), errors.New("请求太多")
}
返回 body1,无}
解释
翻译文本并生成有效负载
我们在这里使用的 API 需要源语言、文本和目标语言。因此,我们根据要求构建了以下代码。创建包含源语言、文本和目标语言的负载。
变量 str2 字符串
str2 = ""
str2 = str2 + "q=" + body.SourceText
str2 = str2 + "&target=" + body.TargetLang
str2 = str2 + "&source=" + body.SourceLang
有效载荷:= strings.NewReader(str2)
创建一个新的 POST 请求
创建一个新的“发布”请求并添加标题。您必须将< YOUR_KEY >替换为X-RapidAPI-Key。
req, err := http.NewRequest("POST", translateURL, 负载)
如果错误!=无{
返回 []byte(""), 错误
}
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, 错误 := http.DefaultClient.Do(req)
如果错误!=无{
返回 []byte(""), 错误
}
传递响应或错误消息
以下代码将提供响应或错误消息。
延迟 res.Body.Close()
body1,错误:= ioutil.ReadAll(res.Body)
如果错误!=无{
返回 []byte(""), 错误
}
延迟 res.Body.Close()
如果 res.StatusCode == http.StatusTooManyRequests {
return []byte(""), errors.New("请求太多")
}
返回 body1,无
获取所有语言
创建另一个函数以获取 Google 翻译在 helpers.go 文件中提供的所有语言。
func GetLanguages()([]字符串,错误){
变种语言[]字符串
网址:=“https://google-translate1.p.rapidapi.com/language/translate/v2/languages”
请求,错误:= http.NewRequest("GET", url, nil)
如果错误!=无{
返回语言,错误
}
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, 错误 := http.DefaultClient.Do(req)
如果错误!=无{
fmt.Println("请求错误", err)
}
延迟 res.Body.Close()
身体,错误:= ioutil.ReadAll(res.Body)
如果错误!=无{
返回语言,错误
}
变量响应
err = json.Unmarshal(正文, &rs)
如果错误!=无{
返回语言,错误
}
对于 _, v := 范围 rs.Data.Languages {
语言 = 追加(语言,诉语言)
}
返回语言,无}
创建一个结构来解组数据
我们需要创建一个结构来解组来自第三方 API 的数据。
该函数将返回一段字符串和错误,其中包含谷歌翻译提供的所有语言。使用X-RapidAPI-Key更改YOUR_KEY。
变量响应
err = json.Unmarshal(正文, &rs)
如果错误!=无{
返回语言,错误
}
对于 _, v := 范围 rs.Data.Languages {
语言 = 追加(语言,诉语言)
}返回语言,无
创建 API
现在在controller/api 目录中的api.go文件中。
我们将创建 2 个 API
1. 从 Google 翻译中获取所有语言
2. 将文本从源语言翻译成目标语言。
从谷歌翻译中获取所有语言
下面的 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")
语言,错误 := helpers.GetLanguages()
如果错误!=无{
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte("内部服务器错误"))
返回
}
langBytes,错误:= json.Marshal(语言)
如果错误!=无{
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte("内部服务器错误"))
返回
}
w.Write(langBytes)}
解释
防止 CORS 错误
使用下面的代码来防止来自前端的 cors 错误。
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")
下面的代码将返回包含所有语言和错误(如果有)的字符串片段。
将文本从源语言翻译成目标语言。
下面的 API 用于将翻译后的数据发送到客户端。为此,下面的辅助函数“ ReqTranslate ”将返回翻译后的文本和错误(如果有)。
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,错误:= ioutil.ReadAll(r.Body)
如果错误!=无{
fmt.Printf("读体错误: %v", err)
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte("错误请求"))
返回
}
变种 rqBody helpers.ReqBody
err = json.Unmarshal(reqbody, &rqBody)
如果错误!=无{
fmt.Printf("解组正文错误: %v", err)
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte("内部服务器错误"))
返回
}
translatedText, 错误 := helpers.ReqTranslate(&rqBody)
如果错误!=无{
fmt.Println("翻译错误", err)
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte("内部服务器错误"))
返回
}
w.Write(翻译文本)}
现在,在 main.go 文件中创建服务器,如下所示。
包主进口 (
“网络/http”
“翻译/控制器/ api”)功能主要(){
http.HandleFunc("/getalllanguages", api.GetAllLanguagesFromGoogleTranslate)
http.HandleFunc("/translate", api.TranslateTheText)
http.ListenAndServe(":8080", 无)}
客户端设置和用户界面
在“google-translate”目录中运行以下命令以创建“client”文件夹。
安装依赖
我们需要使用 bootstrap 来设计我们的组件。通过以下命令,我们可以将 bootstrap 添加为 npm 依赖项并使用“react-bootstrap”类。
建立用户界面
App.js文件看起来像这样来构建用户界面。
<div className="m-100">
<div className="d-flex gap-3 m-4 justify-content-around">
<选择
className="表单选择 w-50"
aria-label="默认选择示例"
名称=“从”
值={form.from}
onChange={({ target }) => handleChange(target)}
>
{languages.map(lang => <option key={lang} value={lang}>{lang}</option>)}
</选择>
<选择
className="表单选择 w-50"
aria-label="默认选择示例"
名称=“到”
值={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="表单浮动">
<文本区域
className="表单控件"
id="输入文本"
名称=“文本”
值={form.text}
onChange={({ target }) => handleChange(target)}
></文本区域>
</div>
<div className="表单浮动">
<文本区域
className="表单控制 ml-200"
id="翻译文本"
名称=“翻译文本”
值={form.traslatedText}
onChange={({ target }) => handleChange(target)}
></文本区域>
</div>
</div>
<分区>
<按钮
类型=“按钮”
className="btn btn-primary mx-4"
onClick={handleTranslate}
>
翻译
</按钮>
</div>
</div>
集成 API 和存储数据
使用“getAllLanguages()”函数获取语言。
异步函数 getAllLanguages() {
const response = await fetch(`http://localhost:8080/getalllanguages`, {
方法:'获取',
标头:{'Content-Type':'application/json'},
})
返回等待 response.json();}
使用 useState 声明本地状态和设置方法。
借助 useEffect() 挂钩,通过“getAllLanguages()”调用上述 API,如下所示。
创建一个名为“form”的对象,将其用作有效负载,并创建一个函数 handleTranslate() 来调用翻译 API。
翻译 API 需要源语言、目标语言和源文本。
源语言是您要翻译的语言。文本用户想要翻译。
目标语言是您希望翻译输出的语言。
异步函数 handleTranslate() {
常量数据 = {
sourceLang: form.from,
targetLang: form.to,
源文本:form.text
}
const response = await fetch(`http://localhost:8080/translate`, {
方法:'POST',
正文:JSON.stringify(数据)
})
response.json().then(res => {
handleChange({
名称:'翻译文本',
值:res.data.translations[0].translatedText
})
})
}
然后还有另一个函数可以帮助我们改变表单变量的状态。
在onChange事件上调用上述函数,如下所示。
<div className="d-flex gap-3 m-4 justify-content-around">
<选择
className="表单选择 w-50"
aria-label="默认选择示例"
名称=“从”
值={form.from}
onChange={({ target }) => handleChange(target)}
>
{languages.map(lang => <option key={lang} value={lang}>{lang}</option>)}
</选择>
<选择
className="表单选择 w-50"
aria-label="默认选择示例"
名称=“到”
值={form.to}
onChange={({ target }) => handleChange(target)}
>
{languages.map(lang => <option key={lang} value={lang}>{lang}</option>)}
</选择>
</div>
使用方法handleTranslate()翻译源文本。
运行应用程序
现在,在服务器文件夹中通过运行以下命令启动后端文件夹。它将在端口号上启动服务器
这将在端口号 8080 上启动服务器。对于前端,我们需要运行命令。
要启动前端服务器,我们的应用程序将在 URL http://localhost:3000上。我们的前端界面将如下所示。
Github 存储库:google-translate-api-example
访问github 存储库以克隆源代码并试用代码。
结论
所以这是关于如何使用 Golang 使用 Google Translate API 翻译文本。我们希望分步指南对您有所帮助。如果您是 Golang 爱好者,请访问Golang 教程以获取基础知识和高级知识。如果您有任何疑问、主题或建议,请联系我们。
还没有评论,来说两句吧...