快速入门:使用 Go 通过文本翻译 API 来翻译字符串

本快速入门介绍如何使用 Go 和文本翻译 REST API 将文本字符串从英文翻译为意大利文和德文。

此快速入门需要包含文本翻译资源的 Azure 认知服务帐户。 如果没有帐户,可以使用试用帐户获取订阅密钥。

先决条件

本快速入门需要:

  • Go
  • 适用于文本翻译的 Azure 订阅密钥

创建一个项目并导入必需的模块

使用最喜欢的 IDE 或编辑器创建新的 Go 项目。 然后,将此代码片段复制到项目的名为 translate-text.go 的文件中。

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "log"
    "net/http"
    "net/url"
    "os"
)

创建 main 函数

此示例将尝试从环境变量 TRANSLATOR_TEXT_KEY 读取文本翻译订阅密钥。 如果不熟悉环境变量,则可将 subscriptionKey 设置为字符串并注释掉条件语句。

将以下代码复制到项目中:

func main() {
    /*
     * Read your subscription key from an env variable.
     * Please note: You can replace this code block with
     * var subscriptionKey = "YOUR_SUBSCRIPTION_KEY" if you don't
     * want to use env variables. If so, be sure to delete the "os" import.
     */
    subscriptionKey := os.Getenv("TRANSLATOR_TEXT_KEY")
    if subscriptionKey == "" {
       log.Fatal("Environment variable TRANSLATOR_TEXT_KEY is not set.")
    }
    /*
     * This calls our translate function, which we'll
     * create in the next section. It takes a single argument,
     * the subscription key.
     */
    translate(subscriptionKey)
}

创建文本翻译函数

让我们创建文本翻译函数。 此函数将接受一个参数,即文本翻译订阅密钥。

func translate(subscriptionKey string) {
    /*  
     * In the next few sections, we'll add code to this
     * function to make a request and handle the response.
     */
}

接下来,构造 URL。 使用 Parse()Query() 方法生成 URL。 你将注意到参数是通过 Add() 方法添加的。 在此示例中,将从英语翻译为德语和意大利语:deit

将此代码复制到 translate 函数中。

// Build the request URL. See: https://golang.org/pkg/net/url/#example_URL_Parse
u, _ := url.Parse("https://api.translator.azure.cn/translate?api-version=3.0")
q := u.Query()
q.Add("to", "de")
q.Add("to", "it")
u.RawQuery = q.Encode()

Note

有关终结点、路由和请求参数的详细信息,请参阅文本翻译 API 3.0:翻译

创建请求正文的结构

接下来,创建请求正文的匿名结构,并使用 json.Marshal() 将其编码为 JSON。 将此代码添加到 translate 函数中。

// Create an anonymous struct for your request body and encode it to JSON
body := []struct {
    Text string
}{
    {Text: "Hello, world!"},
}
b, _ := json.Marshal(body)

生成请求

将请求正文编码为 JSON 后,可以生成 POST 请求并调用文本翻译 API。

// Build the HTTP POST request
req, err := http.NewRequest("POST", u.String(), bytes.NewBuffer(b))
if err != nil {
    log.Fatal(err)
}
// Add required headers to the request
req.Header.Add("Ocp-Apim-Subscription-Key", subscriptionKey)
req.Header.Add("Ocp-Apim-Subscription-Region", "your region")
req.Header.Add("Content-Type", "application/json")

// Call the Translator Text API
res, err := http.DefaultClient.Do(req)
if err != nil {
    log.Fatal(err)
}

处理并输出响应

将此代码添加到 translate 函数以解码 JSON 响应,然后格式化并输出结果。

// Decode the JSON response
var result interface{}
if err := json.NewDecoder(res.Body).Decode(&result); err != nil {
    log.Fatal(err)
}
// Format and print the response to terminal
prettyJSON, _ := json.MarshalIndent(result, "", "  ")
fmt.Printf("%s\n", prettyJSON)

将其放在一起

就是这样,你已构建了一个简单的程序。该程序可以调用文本翻译 API 并返回 JSON 响应。 现在,可以运行该程序了:

go run translate-text.go

如果希望将你的代码与我们的进行比较,请查看 GitHub 上提供的完整示例。

示例响应

成功的响应以 JSON 格式返回,如以下示例所示:

[
  {
    "detectedLanguage": {
      "language": "en",
      "score": 1.0
    },
    "translations": [
      {
        "text": "Hallo Welt!",
        "to": "de"
      },
      {
        "text": "Salve, mondo!",
        "to": "it"
      }
    ]
  }
]

后续步骤

有关认知服务 API 的 Go 示例,请在 GitHub 上查看 Azure SDK for Go

另请参阅

了解如何使用文本翻译 API 执行以下操作: