文档翻译是 Azure Translator 服务的一项基于云的功能,它以支持的语言和各种文件格式异步翻译整个文档。 在本快速入门中,了解如何使用文档翻译和所选编程语言将源文档翻译为目标语言,同时保留结构和文本格式。
备注
文档翻译目前仅在翻译器(单服务)资源中受支持,而未包含在认知服务(多服务)资源中。
文档翻译功能目前仅在 S1 标准服务计划(即用即付)或 D3 批量折扣计划中受支持。 请参阅认知服务定价 - 翻译器。
要开始,需要:
一个 Azure Blob 存储帐户。 你还需要在 Azure Blob 存储帐户中为源文件和目标文件创建容器:
- 源容器。 将在此容器中上传要翻译的文件(必需)。
- 目标容器。 在此容器中存储已翻译的文件(必需)。
单服务翻译器资源 (并非多服务认知服务资源):
按如下所示填写翻译器项目和实例详细信息字段:
订阅。 选择一个可用的 Azure 订阅。
资源组。 可以创建新资源组,或将资源添加到共享相同生命周期、权限和策略的预先存在的资源组。
资源区域。 选择特定区域。 如果打算使用系统分配的托管标识进行身份验证,请选择一个地理区域,如“中国北部”。
名称。 输入为资源选择的名称。 所选名称在 Azure 中必须唯一。
备注
文档翻译需要自定义域终结点。 在“名称”字段中输入的值将会是终结点的自定义域名参数。
定价层。 免费层不支持文档翻译。 请选择标准 S1 来试用该服务。
选择“查看 + 创建”。
查看服务条款,然后选择“创建”以部署资源。
成功部署资源后,选择“转到资源”。
*对翻译服务的请求需要一个只读密钥和自定义终结点来对访问进行身份验证。 自定义域终结点是一个 URL,格式为资源名称、主机名和翻译器子目录,可在 Azure 门户中使用。
如果已创建新资源,请在部署该资源后选择“转到资源”。 如果有现有的文档翻译资源,请直接导航到资源页。
在左侧导航栏中的“资源管理”下,选择“密钥和终结点”。
将你的
key
和document translation endpoint
复制并粘贴到方便的位置(例如 Microsoft 记事本)。 发出 API 调用只需一个密钥。将
key
和document translation endpoint
粘贴到代码示例中,以便对发往文档翻译服务的请求进行身份验证。
需要在 Azure Blob 存储帐户中为源文件和目标文件创建容器。
- 源容器。 将在此容器中上传要翻译的文件(必需)。
- 目标容器。 在此容器中存储已翻译的文件(必需)。
sourceUrl
、targetUrl
和可选的 glossaryUrl
必须包含作为查询字符串追加的共享访问签名 (SAS) 令牌。 可将该令牌分配到容器或特定的 Blob。 参阅为文档翻译处理创建 SAS 令牌。
- 源容器或 Blob 必须已指定读取和列出访问权限。
- 目标容器或 Blob 必须已指定写入和列出访问权限。
- 词汇表 Blob 必须已指定的 读取和列出访问权限。
提示
- 如果在某个操作中翻译多个文件 (Blob),请在容器级别委托 SAS 访问权限。
- 如果在某个操作中翻译单个文件 (Blob),请在 Blob 级别委托 SAS 访问权限。
- 作为 SAS 令牌的替代方法,可以使用系统分配的托管标识来进行身份验证。
对于此项目,你需要将源文档上传到源容器。 可以为此快速入门下载文档翻译示例文档。 源语言为英语。
批处理文档翻译请求将通过 POST 请求提交到翻译器服务终结点。 如果成功,POST 方法将返回 202 Accepted
响应代码,并且服务将创建批处理请求。 经过翻译的文档将会在目标容器中列出。
有关 Azure 翻译工具服务请求限制的详细信息,请参阅文档翻译请求限制。
每个文档翻译 API 请求均包含以下标头:
HTTP 标头 | 说明 |
---|---|
Ocp-Apim-Subscription-Key | 必需:该值是翻译器或认知服务资源的 Azure 密钥。 |
Content-Type | 必需:指定有效负载的内容类型。 接受的值为 application/json 或 charset=UTF-8。 |
- POST 请求正文是名为
inputs
的 JSON 对象。 inputs
对象包含源和目标语言对的sourceURL
与targetURL
容器地址。prefix
和suffix
是区分大小写的字符串,用于筛选源路径中的文档以进行翻译。prefix
字段通常用于描述要翻译的子文件夹。suffix
字段最常用于文件扩展名。- 翻译文档时将应用
glossaries
字段(可选)的值。 - 每个目标语言的
targetUrl
必须唯一。
对于本快速入门,我们将使用最新版本的 Visual Studio IDE 来生成和运行应用程序。
启动 Visual Studio。
在“开始”页面上,选择“新建项目”。
在“创建新项目”页面上,在搜索框中输入“控制台”。 选择“控制台应用程序”模板,然后选择“下一步”。
在“配置新项目”对话框中,在项目名称框中输入
document-translation-qs
。 然后选择“下一步”。在“附加信息”对话框窗口中,选择“.NET 6.0 (长期支持)”,然后选择“创建”。
右键单击“document-translation-qs”项目并选择“管理 NuGet 包...”。
选择“浏览”选项卡并输入“NewtonsoftJson”。
从下拉菜单中选择最新的稳定版本,并在项目中安装该包。
备注
- 从 .NET 6 开始,使用
console
模板的新项目将生成与以前版本不同的新程序样式。 - 新的输出使用最新的 C# 功能,这些功能简化了你需要编写的代码。
- 使用较新版本时,只需编写
Main
方法的主体。 无需包括顶级语句、全局 using 指令或隐式 using 指令。 - 有关详细信息,请参阅新的 C# 模板生成顶级语句。
打开 Program.cs 文件。
删除现有的代码,包括
Console.Writeline("Hello World!")
行。将文档翻译代码示例复制并粘贴到 Program.cs 文件中。
使用 Azure 门户翻译器实例中的值更新
{your-document-translation-endpoint}
和{your-key}
。使用 Azure 门户存储帐户容器实例中的值更新
{your-source-container-SAS-URL}
和{your-target-container-SAS-URL}
。
重要
完成后,请记住将密钥从代码中删除,并且永远不要公开发布该密钥。 对于生产,请使用安全的方式存储和访问凭据,例如 Azure Key Vault。 有关详细信息,请参阅认知服务安全性。
using System.Text;
class Program
{
private static readonly string endpoint = "{your-document-translator-endpoint}/translator/text/batch/v1.0";
private static readonly string key = "{your-key}";
static readonly string route = "/batches";
static readonly string sourceURL = "\" {your-source-container-SAS-URL}\"";
static readonly string targetURL = " \"{your-target-container-SAS-URL}\"";
static readonly string json = ("{\"inputs\": [{\"source\": {\"sourceUrl\":"+sourceURL+" ,\"storageSource\": \"AzureBlob\",\"language\": \"en\"}, \"targets\": [{\"targetUrl\":"+targetURL+",\"storageSource\": \"AzureBlob\",\"category\": \"general\",\"language\": \"es\"}]}]}");
static async Task Main(string[] args)
{
using HttpClient client = new HttpClient();
using HttpRequestMessage request = new HttpRequestMessage();
{
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
request.Method = HttpMethod.Post;
request.RequestUri = new Uri(endpoint + route);
request.Headers.Add("Ocp-Apim-Subscription-Key", key);
request.Content = content;
HttpResponseMessage response = await client.SendAsync(request);
string result = response.Content.ReadAsStringAsync().Result;
if (response.IsSuccessStatusCode)
{
Console.WriteLine($"Status code: {response.StatusCode}");
Console.WriteLine();
Console.WriteLine($"Response Headers:");
Console.WriteLine(response.Headers);
}
else
Console.Write("Error");
}
}
}
将代码示例添加到应用程序后,选择“document-translation-qs” 旁边的绿色“开始”按钮生成并运行程序,或者按 F5。
:::image type="content" source="../../media/visual-studio/run-visual-studio.png" alt-text="Screenshot: run your Visual Studio program.":::
成功完成后:
- 可以在目标容器中找到已翻译的文档。
- 成功的 POST 方法返回
202 Accepted
响应代码,指示服务创建了批处理请求。 - POST 请求还返回包含
Operation-Location
的响应标头,这些标头提供在后续 GET 请求中使用的值。
你可以使用任何文本编辑器来编写 Go 应用程序。 建议使用最新版本的 Visual Studio Code 和 Go 扩展。
提示
如果你不熟悉 Go,请尝试学习 Go 入门 Learn 模块。
请下载并安装 Go(如果尚未这样做)。
下载适用于你的操作系统的 Go 版本。
下载完成后,运行安装程序。
打开命令提示符并输入以下命令,以确认 Go 是否已安装:
```console go version ```
在控制台窗口(例如 cmd、PowerShell 或 Bash)中,为应用创建一个名为“document-translation-qs”的新目录,然后导航至该目录。
在“document-translation-qs”目录中创建一个名为“document-translation.go”的新 Go 文件。
将文档翻译代码示例复制并粘贴到“document-translation.go”文件中。
使用 Azure 门户翻译器实例中的值更新
{your-document-translation-endpoint}
和{your-key}
。使用 Azure 门户存储帐户容器实例中的值更新
{your-source-container-SAS-URL}
和{your-target-container-SAS-URL}
。
重要
完成后,请记住将密钥从代码中删除,并且永远不要公开发布该密钥。 对于生产,请使用安全的方式存储和访问凭据,例如 Azure Key Vault。 有关详细信息,请参阅认知服务安全性。
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
httpposturl := "{your-document-translation-endpoint}/translator/text/batch/v1.0/batches"
fmt.Println("Response", httpposturl)
var jsonData = []byte(`{
"inputs": [
{
"source": {
"sourceUrl": "{your-source-container-SAS-URL}"
},
"targets": [
{
"{your-target-container-SAS-URL}",
"language": "fr"
}
]
}
]
}`)
request, error := http.NewRequest("POST", httpposturl, bytes.NewBuffer(jsonData))
request.Header.Set("Content-Type", "application/json")
request.Header.Set("Ocp-Apim-Subscription-Key", "{your-key}")
client := &http.Client{}
response, error := client.Do(request)
if error != nil {
panic(error)
}
defer response.Body.Close()
fmt.Println("response Status:", response.Status)
var printHeader = (response.Header)
prettyJSON, _ := json.MarshalIndent(printHeader, "", " ")
fmt.Printf("%s\n", prettyJSON)
}
将代码示例添加到应用程序后,可以在命令提示符或终端提示符下执行 Go 程序。 确保提示路径设置为“document-translation-qs”文件夹并使用以下命令:
```console
go run document-translation.go
```
成功完成后:
- 可以在目标容器中找到已翻译的文档。
- 成功的 POST 方法返回
202 Accepted
响应代码,指示服务创建了批处理请求。 - POST 请求还返回包含
Operation-Location
的响应标头,这些标头提供在后续 GET 请求中使用的值。
对于本快速入门,我们会使用 Gradle 生成自动化工具来创建和运行应用程序。
应使用最新版本的 Visual Studio Code 或者你首选的 IDE。 请参阅 Visual Studio Code 中的 Java。
提示
- Visual Studio Code 提供适用于 Windows 和 macOS 的 "Java 编码包"。该编码包是 VS Code、Java 开发工具包 (JDK) 和 Microsoft 建议扩展的集合。 编码包还可用于修复现有开发环境。
- 如果使用 VS Code 和适用于 Java 的编码包,请安装 Gradle for Java 扩展。
如果不使用 Visual Studio Code,请确保在开发环境中安装了以下内容:
Java 开发工具包 (OpenJDK) 版本 8 或更高版本。
Gradle 版本 6.8 或更高版本。
在控制台窗口(例如 cmd、PowerShell 或 Bash)中,为应用创建一个名为“document-translation”的新目录,然后导航至该目录。
mkdir document-translation && document-translation
mkdir document-translation; cd document-translation
从 document-translation 目录运行
gradle init
命令。 此命令将创建 Gradle 的基本生成文件,其中包括 build.gradle.kts - 在运行时将使用该文件创建并配置应用程序。gradle init --type basic
当提示你选择一个 DSL 时,选择 Kotlin。
按 Return 或 Enter 接受默认项目名称 (document-translation)。
备注
创建整个应用程序可能需要几分钟的时间,但很快就会看到几个文件夹和文件,包括
build-gradle.kts
。使用以下代码更新
build.gradle.kts
:
plugins {
java
application
}
application {
mainClass.set("DocumentTranslation")
}
repositories {
mavenCentral()
}
dependencies {
implementation("com.squareup.okhttp3:okhttp:4.10.0")
implementation("com.google.code.gson:gson:2.9.0")
}
在 document-translation 目录中,运行以下命令:
mkdir -p src/main/java
该命令创建以下目录结构:
导航到
java
目录,创建一个名为DocumentTranslation.java
的文件。提示
可以使用 Powershell 创建新文件。
按住 Shift 键并右键单击该文件夹,在项目目录中打开 Powershell 窗口。
输入以下命令 "New-Item DocumentTranslation.java"。
还可以在 IDE 中创建名为
DocumentTranslation.java
的新文件并将其保存到java
目录。
将文档翻译代码示例复制并粘贴到“DocumentTranslation.java”文件中。
使用 Azure 门户翻译器实例中的值更新
{your-document-translation-endpoint}
和{your-key}
。使用 Azure 门户存储帐户容器实例中的值更新
{your-source-container-SAS-URL}
和{your-target-container-SAS-URL}
。
重要
完成后,请记住将密钥从代码中删除,并且永远不要公开发布该密钥。 对于生产,请使用安全的方式存储和访问凭据,例如 Azure Key Vault。 有关详细信息,请参阅认知服务安全性。
import java.io.*;
import java.net.*;
import java.util.*;
import okhttp3.*;
public class DocumentTranslation {
String key = "{your-key}";
String endpoint = "{your-document-translation-endpoint}/translator/text/batch/v1.0";
String path = endpoint + "/batches";
String sourceSASUrl = "{your-source-container-SAS-URL}";
String targetSASUrl = "{your-target-container-SAS-URL}";
String jsonInputString = (String.format("{\"inputs\":[{\"source\":{\"sourceUrl\":\"%s\"},\"targets\":[{\"targetUrl\":\"%s\",\"language\":\"fr\"}]}]}", sourceSASUrl, targetSASUrl));
OkHttpClient client = new OkHttpClient();
public void post() throws IOException {
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, jsonInputString);
Request request = new Request.Builder()
.url(path).post(body)
.addHeader("Ocp-Apim-Subscription-Key", key)
.addHeader("Content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
System.out.println(response.code());
System.out.println(response.headers());
}
public static void main(String[] args) {
try {
DocumentTranslation sampleRequest = new DocumentTranslation();
sampleRequest.post();
} catch (Exception e) {
System.out.println(e);
}
}
}
将代码示例添加到应用程序后,导航回主项目目录“document-translation”,打开控制台窗口,然后输入以下命令:
使用
build
命令生成应用程序:gradle build
使用
run
命令运行应用程序:gradle run
成功完成后:
- 可以在目标容器中找到已翻译的文档。
- 成功的 POST 方法返回
202 Accepted
响应代码,指示服务创建了批处理请求。 - POST 请求还返回包含
Operation-Location
的响应标头,这些标头提供在后续 GET 请求中使用的值。
对于本快速入门,我们会使用 Node.js JavaScript 运行时环境来创建和运行应用程序。
安装最新版本的 Node.js(如果尚未这样做)。 Node.js 安装中包含了 Node 包管理器 (npm)。
提示
如果你不熟悉 Node.js,请尝试学习 Node.js 简介 Learn 模块。
在控制台窗口(例如 cmd、PowerShell 或 Bash)中,为应用创建名为
document-translation
的新目录,并导航到该目录。mkdir document-translation && cd document-translation
mkdir document-translation; cd document-translation
运行 npm init 命令以初始化应用程序并为项目构建基架。
npm init
通过接受终端中显示的提示来指定项目的属性。
- 最重要的属性包括名称、版本号和入口点。
- 建议保留
index.js
作为入口点名称。 描述、测试命令、GitHub 存储库、关键字、作者和许可证信息均为可选属性 —— 在此项目中可跳过。 - 通过选择“Return”或“Enter”,接受括号中的建议。
- 完成提示后,将在 document-translation 目录中创建一个
package.json
文件。
使用 npm 在 document-translation 应用目录中安装
axios
HTTP 库和uuid
包:npm install axios uuid
创建应用目录中的
index.js
文件。提示
可以使用 Powershell 创建新文件。
按住 Shift 键并右键单击该文件夹,在项目目录中打开 Powershell 窗口。
输入以下命令:New-Item index.js。
还可以在 IDE 中创建名为
index.js
的新文件并将其保存到document-translation
目录。
将文档翻译代码示例复制并粘贴到
index.js
文件中。使用 Azure 门户翻译器实例中的值更新
{your-document-translation-endpoint}
和{your-key}
。使用 Azure 门户存储帐户容器实例中的值更新
{your-source-container-SAS-URL}
和{your-target-container-SAS-URL}
。
重要
完成后,请记住将密钥从代码中删除,并且永远不要公开发布该密钥。 对于生产,请使用安全的方式存储和访问凭据,例如 Azure Key Vault。 有关详细信息,请参阅认知服务安全性。
const axios = require('axios').default;
let endpoint = '{your-document-translation-endpoint}/translator/text/batch/v1.0';
let route = '/batches';
let key = '{your-key}';
let sourceSASUrl = "{your-source-container-SAS-URL}";
let targetSASUrl = "{your-target-container-SAS-URL}"
let data = JSON.stringify({"inputs": [
{
"source": {
"sourceUrl": sourceSASUrl,
"storageSource": "AzureBlob",
"language": "en"
},
"targets": [
{
"targetUrl": targetSASUrl,
"storageSource": "AzureBlob",
"category": "general",
"language": "es"}]}]});
let config = {
method: 'post',
baseURL: endpoint,
url: route,
headers: {
'Ocp-Apim-Subscription-Key': key,
'Content-Type': 'application/json'
},
data: data
};
axios(config)
.then(function (response) {
let result = { statusText: response.statusText, statusCode: response.status, headers: response.headers };
console.log()
console.log(JSON.stringify(result, null, 2));
})
.catch(function (error) {
console.log(error);
});
将代码示例添加到应用程序后,运行程序:
导航到应用程序目录 (document-translation)。
在终端中输入并运行以下命令:
node index.js
成功完成后:
- 可以在目标容器中找到已翻译的文档。
- 成功的 POST 方法返回
202 Accepted
响应代码,指示服务创建了批处理请求。 - POST 请求还返回包含
Operation-Location
的响应标头,这些标头提供在后续 GET 请求中使用的值。
安装最新版本的 Python 3.x(如果尚未这样做)。 Python 安装中包含了 Python 安装程序包 (pip)。
提示
如果你不熟悉 Python,请尝试学习 Python 简介 Learn 模块。
打开终端窗口,并使用 pip 安装 Requests 库和 uuid0 包:
pip install requests uuid
使用首选编辑器或 IDE,为应用创建一个名为
document-translation
的新目录。在“document-translation”目录中创建一个名为“document-translation.py”的新 Python 文件。
将文档翻译代码示例复制并粘贴到
document-translation.py
文件中。使用 Azure 门户翻译器实例中的值更新
{your-document-translation-endpoint}
和{your-key}
。使用 Azure 门户存储帐户容器实例中的值更新
{your-source-container-SAS-URL}
和{your-target-container-SAS-URL}
。
重要
完成后,请记住将密钥从代码中删除,并且永远不要公开发布该密钥。 对于生产,请使用安全的方式存储和访问凭据,例如 Azure Key Vault。 有关详细信息,请参阅认知服务安全性。
import requests
endpoint = '{your-document-translation-endpoint}'
key = '{your-key}'
path = 'translator/text/batch/v1.0/batches'
constructed_url = endpoint + path
sourceSASUrl = '{your-source-container-SAS-URL}'
targetSASUrl = '{your-target-container-SAS-URL}'
body= {
"inputs": [
{
"source": {
"sourceUrl": sourceSASUrl,
"storageSource": "AzureBlob",
"language": "en"
},
"targets": [
{
"targetUrl": targetSASUrl,
"storageSource": "AzureBlob",
"category": "general",
"language": "es"
}
]
}
]
}
headers = {
'Ocp-Apim-Subscription-Key': key,
'Content-Type': 'application/json',
}
response = requests.post(constructed_url, headers=headers, json=body)
response_headers = response.headers
print(f'response status code: {response.status_code}\nresponse status: {response.reason}\n\nresponse headers:\n')
for key, value in response_headers.items():
print(key, ":", value)
将代码示例添加到应用程序后,构建并运行程序:
导航到“document-translation”目录。
在控制台中输入并运行以下命令:
python document-translation.py
成功完成后:
- 可以在目标容器中找到已翻译的文档。
- 成功的 POST 方法返回
202 Accepted
响应代码,指示服务创建了批处理请求。 - POST 请求还返回包含
Operation-Location
的响应标头,这些标头提供在后续 GET 请求中使用的值。
在本快速入门中,我们使用 cURL 命令行工具进行文档翻译 REST API 调用。
备注
大多数 Windows 10 和 Windows 11 以及大多数 macOS 和 Linux 发行版都预装了 cURL 包。 可以使用以下命令检查包版本:Windows: curl.exe -V
。
macOS curl -V
Linux: curl --version
如果尚未安装 cURL,以下是适用于平台的链接:
使用首选编辑器或 IDE,为应用创建一个名为
document-translation
的新目录。在“document-translation”目录中创建一个名为“document-translation.json”的新 json 文件。
将文档翻译“请求示例”复制并粘贴到
document-translation.json
文件中。 使用 Azure 门户存储帐户容器实例中的值替换{your-source-container-SAS-URL}
和{your-target-container-SAS-URL}
。**Request sample**
{ "inputs":[ { "source":{ "sourceUrl":"{your-source-container-SAS-URL}" }, "targets":[ { "targetUrl":"{your-target-container-SAS-URL}", "language":"fr" } ] } ] }
在运行 POST 请求之前,将 {your-source-container-SAS-URL}
和 {your-key}
替换为 Azure 门户翻译器实例中的终结点值。
重要
完成后,请记住将密钥从代码中删除,并且永远不要公开发布该密钥。 对于生产,请使用安全的方式存储和访问凭据,例如 Azure Key Vault。 有关详细信息,请参阅认知服务安全性。
PowerShell
cmd /c curl "{your-document-translator-endpoint}/translator/text/batch/v1.0/batches" -i -X POST --header "Content-Type: application/json" --header "Ocp-Apim-Subscription-Key: {your-key}" --data "@document-translation.json"
命令提示符/终端
curl "{your-document-translator-endpoint}/translator/text/batch/v1.0/batches" -i -X POST --header "Content-Type: application/json" --header "Ocp-Apim-Subscription-Key: {your-key}" --data "@document-translation.json"
成功完成后:
- 可以在目标容器中找到已翻译的文档。
- 成功的 POST 方法返回
202 Accepted
响应代码,指示服务创建了批处理请求。 - POST 请求还返回包含
Operation-Location
的响应标头,这些标头提供在后续 GET 请求中使用的值。
完成了,恭喜! 在本快速入门中,你使用文档翻译翻译了文档,同时保留其原始结构和数据格式。
了解有关文档翻译的详细信息: