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

yanding 2023-06-05 405

您是否想过如何开发自己的翻译器?您是否遇到过需要开发翻译文本功能的需求?您是否正在为开发一款翻译软件而苦恼?那么这个关于如何使用 Golang使用 Google Translate API 翻译文本的教程适合你!让我们看看今天的教程涵盖了哪些内容。

教程目标:使用 Google Translate API 翻译文本

  • RapidAPI Hub 的理解和实现

  • 翻译文本的服务器端逻辑

  • 创建 API

  • 建立用户界面

  • 源代码:使用 Google Translate API 翻译文本的演示应用程序

初始设置

让我们先从后端开始。创建一个名为“google-translate”的文件夹。在此文件夹中创建一个名为“be”的新文件夹。在此文件夹中,我们将执行后端代码。

如何使用 Golang 使用 Google Translate API 翻译文本?
mkdir 谷歌翻译mkdir 服务器

现在我们将使用此命令创建一个项目

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

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

RapidAPI 中心设置

现在在这个网站上RapidAPI Hub并创建一个帐户。如果您已经登录,那么只需登录即可。

在搜索 API 文本框中,搜索 Google 翻译。您将被重定向到Google Translate API 文档

此外,单击“订阅测试”按钮。您将看到如下所示的定价图表。

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

现在,订阅每月 0.00 美元的基本计划。不要选择花钱的计划。

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

您现在已成功订阅。您将获得用于发送请求的“X-RapidAPI-Key” 。请保守秘密。

基本项目设置

现在,转到编码部分。我们的演示应用程序将包含后端和前端的两个主要文件夹,分别是服务器和客户端。

文件夹结构是这样的:

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

在 helpers.go 文件中,我们将创建一个名为 ReqBody 的结构。

// helpers.go

如何使用 Golang 使用 Google Translate API 翻译文本?
类型 ReqBody 结构 {
  SourceLang 字符串 `json:"sourceLang"`
  TargetLang 字符串 `json:"targetLang"`
  SourceText 字符串 `json:"sourceText"`}

将 Google 翻译 URL 定义为常量值。我们会将请求发送到此 URL。

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

您是否正在寻找 Golang 专家来了解您的项目需求以准确满足这些需求?
拯救空缺!我们了解您的项目的重要性。相信我们!立即联系 Bacancy 并聘请具有高问题解决能力和架构知识的Golang 开发人员。

服务器端逻辑

打开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, 负载)
  如果错误!=无{
      返回 []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 需要源语言、文本和目标语言。因此,我们根据要求构建了以下代码。创建包含源语言、文本和目标语言的负载。

如何使用 Golang 使用 Google Translate 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

如何使用 Golang 使用 Google Translate API 翻译文本?
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(""), 错误
  }

传递响应或错误消息

以下代码将提供响应或错误消息。

如何使用 Golang 使用 Google Translate API 翻译文本?
延迟 res.Body.Close()
  body1,错误:= ioutil.ReadAll(res.Body)
  如果错误!=无{
      返回 []byte(""), 错误
  }
  延迟 res.Body.Close()
  如果 res.StatusCode == http.StatusTooManyRequests {
      return []byte(""), errors.New("请求太多")
  }
  返回 body1,无

获取所有语言

创建另一个函数以获取 Google 翻译在 helpers.go 文件中提供的所有语言。

如何使用 Golang 使用 Google Translate API 翻译文本?
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 的数据。

如何使用 Golang 使用 Google Translate API 翻译文本?
类型 Resp 结构 {
  数据结构{
      语言[]结构{
          语言字符串 `json:"language"`
      `json:“语言”`
  `json:“数据”`}

该函数将返回一段字符串和错误,其中包含谷歌翻译提供的所有语言。使用X-RapidAPI-Key更改YOUR_KEY

如何使用 Golang 使用 Google Translate API 翻译文本?
变量响应
  err = json.Unmarshal(正文, &rs)
  如果错误!=无{
      返回语言,错误
  }
  对于 _, v := 范围 rs.Data.Languages {
      语言 = 追加(语言,诉语言)
  }返回语言,无

创建 API

现在在controller/api 目录中的api.go文件中。

我们将创建 2 个 API
1. 从 Google 翻译中获取所有语言
2. 将文本从源语言翻译成目标语言。

从谷歌翻译中获取所有语言

下面的 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")
  语言,错误 := helpers.GetLanguages()
  如果错误!=无{
      w.WriteHeader(http.StatusInternalServerError)
      w.Write([]byte("内部服务器错误"))
      返回
  }
  langBytes,错误:= json.Marshal(语言)
  如果错误!=无{
      w.WriteHeader(http.StatusInternalServerError)
      w.Write([]byte("内部服务器错误"))
      返回
  }
  w.Write(langBytes)}

解释

防止 CORS 错误

使用下面的代码来防止来自前端的 cors 错误。

如何使用 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")

下面的代码将返回包含所有语言和错误(如果有)的字符串片段。

如何使用 Golang 使用 Google Translate API 翻译文本?
res, 错误 := http.DefaultClient.Do(req)
  如果错误!=无{
      fmt.Println("请求错误", err)
  }

将文本从源语言翻译成目标语言。

下面的 API 用于将翻译后的数据发送到客户端。为此,下面的辅助函数“ ReqTranslate ”将返回翻译后的文本和错误(如果有)。

如何使用 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,错误:= 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 文件中创建服务器,如下所示。

如何使用 Golang 使用 Google Translate API 翻译文本?
包主进口 (
  “网络/http”
  “翻译/控制器/ api”)功能主要(){
  http.HandleFunc("/getalllanguages", api.GetAllLanguagesFromGoogleTranslate)
  http.HandleFunc("/translate", api.TranslateTheText)
  http.ListenAndServe(":8080", 无)}

客户端设置和用户界面

在“google-translate”目录中运行以下命令以创建“client”文件夹。

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

安装依赖

我们需要使用 bootstrap 来设计我们的组件。通过以下命令,我们可以将 bootstrap 添加为 npm 依赖项并使用“react-bootstrap”类。

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

建立用户界面

App.js文件看起来像这样来构建用户界面。

如何使用 Golang 使用 Google Translate API 翻译文本?
<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()”函数获取语言。

如何使用 Golang 使用 Google Translate API 翻译文本?
异步函数 getAllLanguages() {
const response = await fetch(`http://localhost:8080/getalllanguages`, {
  方法:'获取',
  标头:{'Content-Type':'application/json'},
})
返回等待 response.json();}

使用 useState 声明本地状态和设置方法。

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

借助 useEffect() 挂钩,通过“getAllLanguages()”调用上述 API,如下所示。

如何使用 Golang 使用 Google Translate API 翻译文本?
使用效果(()=> {
  常量数据 = getAllLanguages()
  data.then(res => {
    设置语言(资源)
  })
}, []);

创建一个名为“form”的对象,将其用作有效负载,并创建一个函数 handleTranslate() 来调用翻译 API。

如何使用 Golang 使用 Google Translate API 翻译文本?
const [表单, 设置表单] = useState({
  到: ””,
  从: ””,
  文本: ””,
  翻译文本:“”
});

翻译 API 需要源语言、目标语言和源文本。

  • 源语言是您要翻译的语言。文本用户想要翻译。

  • 目标语言是您希望翻译输出的语言。

如何使用 Golang 使用 Google Translate 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
    })
  })
}

然后还有另一个函数可以帮助我们改变表单变量的状态。

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

在onChange事件上调用上述函数,如下所示。

如何使用 Golang 使用 Google Translate API 翻译文本?
<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()翻译源文本。

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

运行应用程序

现在,在服务器文件夹中通过运行以下命令启动后端文件夹。它将在端口号上启动服务器

如何使用 Golang 使用 Google Translate API 翻译文本?
去运行 main.go

这将在端口号 8080 上启动服务器。对于前端,我们需要运行命令。

如何使用 Golang 使用 Google Translate API 翻译文本?
npm 开始

要启动前端服务器,我们的应用程序将在 URL http://localhost:3000上。我们的前端界面将如下所示。

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

Github 存储库:google-translate-api-example

访问github 存储库以克隆源代码并试用代码。

结论

所以这是关于如何使用 Golang 使用 Google Translate API 翻译文本。我们希望分步指南对您有所帮助。如果您是 Golang 爱好者,请访问Golang 教程以获取基础知识和高级知识。如果您有任何疑问、主题或建议,请联系我们。


The End