你有没有想过如何开发自己的翻译器?或者你是否遇到过需要开发文本翻译功能的需求?那么本文关于Golang如何使用谷歌翻译API翻译文本的教程就是为你准备的!让我们来看看今天的教程都讲了些什么。
- RapidAPI点理解和实现
- 创建API和用户接口
- 实现服务端文本翻译逻辑
初始配置
先初始化一个Go项目:在本地创建"google-translate文件夹,在这个文件夹中创建一个名为server的新文件夹。在这个文件夹中,我们将执行后端代码。
mkdir google-translate
cd google-translate
mkdir server
go mode init translate
Rapid API设置
在RapidAPI Hub[https://rapidapi.com/hub]这个网站上创建一个帐户。如果你已经注册了,那就直接登录。
RapidAPI Hub
RapidAPI hub是一个API中心,是开发人员能够查找、管理和连接大量的API。让开发人员在一个地方管理所有的API集成,并提供实时性能指标。
在上面打开的RapidAPI网站的左上角搜索框中,搜索Google Translate,在返回的列表中找到并点击进入:
Google Translate
然后你需要订阅
选择订阅Google翻译API
可以选择免费的,会返回订阅成功:
你将获得“X-RapidAPI-Key”用于发送请求。请保管好你的密匙。
测试翻译API接口
在RapidAPI网站上,我们可以看到可使用的接口:
Google翻译接口
中间一栏介绍每个接口详细信息,右边一栏提供了各种语言的接口Demo。
获取各种语言种类
我们在网站上选择GET language接口,查看Go语言实现如下所示:
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://google-translate1.p.rapidapi.com/language/translate/v2/languages"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept-Encoding", "application/gzip")
req.Header.Add("X-RapidAPI-Key", "xxxxxx")
req.Header.Add("X-RapidAPI-Host", "google-translate1.p.rapidapi.com")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
执行结果如下:
{
"data":
{
"languages":
[
{
"language": "af"
},
{
"language": "ak"
},
{
"language": "am"
},
{
"language": "en" //英文
},
{
"language": "zh-CN" //中文
},
...
]
}
}
上面返回的就是Google翻译支持的各种语言。
翻译API
现在我们根据上面的语言列表,使用翻译API来对英文到中文翻译功能的测试。
代码如下所示:
package main
import (
"fmt"
"io/ioutil"
"net/http"
"strings"
)
func main() {
url := "https://google-translate1.p.rapidapi.com/language/translate/v2"
payload := strings.NewReader("q=Hello%2C%20world!&target=zh-CN&source=en")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("content-type", "application/x-www-form-urlencoded")
req.Header.Add("Accept-Encoding", "application/gzip")
req.Header.Add("X-RapidAPI-Key", "xxxx")
req.Header.Add("X-RapidAPI-Host", "google-translate1.p.rapidapi.com")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
执行结果:
{
"data":
{
"translations":
[
{
"translatedText": "你好世界!"
}
]
}
}
机遇以上两个接口,就可以实现翻译功能了。
Github上面也有完整的例子,结合前端的实现:
代码地址:https://github.com/Aniket303/google-translate1