使用翻译 API 进行文本翻译

Download Sample下载示例

可以使用 Microsoft 翻译工具 API 通过 REST API 来翻译语音和文本。 本文介绍了如何在 Xamarin.Forms 应用程序中使用 Microsoft 文本翻译 API 将一种语言的文本翻译成另一种语言。

概述

翻译器 API 有两个组件:

  • 文本翻译 REST API,用于将文本从一种语言翻译为另一种语言的文本。 API 会在翻译之前自动检测发送的文本的语言。
  • 语音翻译 REST API,用于将语音从一种语言转录为另一种语言的文本。 此 API 还集成了文本转语音功能,可以将翻译的文本再次转换成语音。

本文重点介绍如何使用文本翻译 API 将文本从一种语言翻译到另一种语言。

注意

如果还没有 Azure 订阅,可以在开始前创建一个免费帐户

必须获取 API 密钥才能使用文本翻译 API。 可以在如何注册 Microsoft 文本翻译 API 获取此信息。

有关 Microsoft 文本翻译 API 的详细信息,请参阅文本翻译 API 文档

身份验证

对文本翻译 API 发出的每个请求都需要一个 JSON Web 令牌 (JWT) 访问令牌,该令牌可从 https://api.cognitive.microsoft.com/sts/v1.0/issueToken 的认知服务令牌服务获取。 可以通过向令牌服务发出 POST 请求来获取令牌,并指定包含 API 密钥作为其值的 Ocp-Apim-Subscription-Key 标头。

以下代码示例演示如何从令牌服务请求访问令牌:

public AuthenticationService(string apiKey)
{
    subscriptionKey = apiKey;
    httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", apiKey);
}
...
async Task<string> FetchTokenAsync(string fetchUri)
{
    UriBuilder uriBuilder = new UriBuilder(fetchUri);
    uriBuilder.Path += "/issueToken";
    var result = await httpClient.PostAsync(uriBuilder.Uri.AbsoluteUri, null);
    return await result.Content.ReadAsStringAsync();
}

返回的访问令牌(Base64 文本)的到期时间为 10 分钟。 因此,示例应用程序每隔 9 分钟续订一次访问令牌。

必须在每个文本翻译 API 调用中指定访问令牌,作为以字符串 Bearer 为前缀的 Authorization 标头,如以下代码示例所示:

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);

有关认知服务令牌服务的详细信息,请参阅身份验证

执行文本翻译

可以通过向 https://api.microsofttranslator.com/v2/http.svc/translatetranslate API 发出 GET 请求来实现文本翻译。 在示例应用程序中,TranslateTextAsync 方法会调用文本翻译过程:

public async Task<string> TranslateTextAsync(string text)
{
  ...
  string requestUri = GenerateRequestUri(Constants.TextTranslatorEndpoint, text, "en", "de");
  string accessToken = authenticationService.GetAccessToken();
  var response = await SendRequestAsync(requestUri, accessToken);
  var xml = XDocument.Parse(response);
  return xml.Root.Value;
}

TranslateTextAsync 方法会生成请求 URI,并从令牌服务检索访问令牌。 然后,文本翻译请求将发送到 translate API,该 API 返回包含结果的 XML 响应。 将分析 XML 响应,并将翻译结果返回到要显示的调用方法。

有关文本翻译 REST API 的详细信息,请参阅文本翻译 API

配置文本翻译

可以通过指定 HTTP 查询参数来配置文本翻译过程:

string GenerateRequestUri(string endpoint, string text, string to)
{
  string requestUri = endpoint;
  requestUri += string.Format("?text={0}", Uri.EscapeUriString(text));
  requestUri += string.Format("&to={0}", to);
  return requestUri;
}

此方法设置要翻译的文本以及要翻译文本的语言。 有关 Microsoft 翻译工具支持的语言列表,请参阅 Microsoft 文本翻译 API 中支持的语言

注意

如果应用程序需要知道文本所使用的语言,则可以调用 Detect API 来检测文本字符串的语言。

发送请求

SendRequestAsync 方法向文本翻译 REST API 发出 GET 请求并返回响应:

async Task<string> SendRequestAsync(string url, string bearerToken)
{
    if (httpClient == null)
    {
        httpClient = new HttpClient();
    }
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);

    var response = await httpClient.GetAsync(url);
    return await response.Content.ReadAsStringAsync();
}

此方法通过将访问令牌添加到 Authorization 标头来生成 GET 请求,其前缀为字符串 Bearer。 然后,GET 请求将发送到 translate API,请求 URL 指定要翻译的文本,以及要将文本翻译为的语言。 然后,该响应将读取并返回到调用方法。

如果请求有效,translate API 将在响应中发送 HTTP 状态代码 200(正常),这表示请求成功并且请求的信息包含在响应中。 有关可能的错误响应的列表,请参阅 GET Translate 响应消息。

处理响应

API 响应以 XML 格式返回。 以下 XML 数据显示了典型的成功响应消息:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Morgen kaufen gehen ein</string>

在示例应用程序中,XML 响应分析为 XDocument 实例,其中 XML 根值将返回到调用方法以供显示,如以下屏幕截图所示:

Text Translation to German

总结

本文介绍了如何使用 Microsoft 文本翻译 API 在 Xamarin.Forms 应用程序中将文本从一种语言翻译为另一种语言的文本。 除了翻译文本,Microsoft Translator API 还可以将语音从一种语言转录为另一种语言的文本。