翻译文档

Cloud Translation 高级版提供了一个文档 Translation API,用于直接翻译 PDF 和 DOCX 等格式的文档。与普通文本翻译相比,文档翻译会保留已翻译文档中的原始格式和布局,可帮助您保留很多段落内容,例如段落中断。

以下部分介绍了如何翻译文档,以及如何将文档翻译与其他 Cloud Translation 高级版功能(例如术语表和 AutoML Translation 模型)搭配使用。文档翻译支持在线和批量翻译请求。

支持的文件格式

文档翻译支持以下文件类型。

输入 MIME 类型文档
DOCX application/vnd.openxmlformats-officedocument.wordprocessingml.document
PDF* application/pdf
PPTX application/vnd.openxmlformats-officedocument.presentationml.presentation
XLSX application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

*文档翻译支持原生和扫描的 PDF 文档。

一般来说,与 PDF 文件翻译相比,DOCX 和 PPTX 文件翻译可以更好地保留原始布局。对于 PDF 文件翻译,如果您有这些文件格式的原始内容,我们建议您翻译这些文件,然后将其转换为 PDF 文件。

准备工作

在开始使用 Cloud Translation API 之前,您必须具有启用了 Cloud Translation API 的项目,并且必须具有具有适当凭据的私钥。您还可以安装常用编程语言的客户端库,以便调用 API。如需了解详情,请参阅设置页面。

所需权限

对于需要 Cloud Storage 访问权限的请求(例如批量文档翻译请求),您可能需要 Cloud Storage 权限才能读取输入文件或将输出文件发送到存储分区。例如,要从存储分区读取输入文件,您必须至少拥有存储分区的读取对象权限(由角色 roles/storage.objectViewer 提供)。如需详细了解 Cloud Storage 角色,请参阅 Cloud Storage 文档

翻译文档(在线)

在线翻译提供单个文件的实时处理(同步处理)。对于 PDF,文件大小最大可为 20 MB 和 20 页。对于其他文档类型,文件大小上限为 20 MB,无页面限制。

翻译 Cloud Storage 中的文档

以下示例演示了如何从 Cloud Storage 存储分区转换文件并将结果输出到 Cloud Storage 存储分区。该响应还会返回字节流。您可以指定 MIME 类型;如果不可用,文档翻译会使用输入文件的扩展名来确定。

REST 和命令行

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_NUMBER_OR_ID:您的 Google Cloud 项目编号或 ID
  • LOCATION:您要执行此操作的区域。例如 us-central1
  • SOURCE_LANGUAGE:(可选)输入文档的语言代码。如果已知,请设置为语言支持中列出的某种语言代码。
  • TARGET_LANGUAGE:输入文档要翻译的目标语言。设置为语言支持中列出的某种语言代码。
  • INPUT_FILE_PATH:输入文档的 Cloud Storage 位置和文件名。
  • OUTPUT_FILE_PREFIX:将存储输出文档的 Cloud Storage 位置。

HTTP 方法和网址:

POST https://translation.googleapis.com/v3beta1/projects/PROJECT_NUMBER_OR_ID/locations/LOCATION:translateDocument

请求 JSON 正文:

{
  "source_language_code": "SOURCE_LANGUAGE",
  "target_language_code": "TARGET_LANGUAGE",
  "document_input_config": {
    "gcsSource": {
      "inputUri": "gs://INPUT_FILE_PATH"
    }
  },
  "document_output_config": {
    "gcsDestination": {
      "outputUriPrefix": "gs://OUTPUT_FILE_PREFIX"
    }
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "documentTranslation": {
    "byteStreamOutputs": ["BYTE_STREAM"],
    "mimeType": "MIME_TYPE"
  },
  "model": "projects/PROJECT_NUMBER/locations/LOCATION/models/general/nmt"
}

Node.js

在试用此示例之前,请按照《Translation 快速入门:使用客户端库》中的 Node.js 设置说明进行操作。如需了解详情,请参阅 Translation Node.js API 参考文档

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const location = 'global';
// const inputUri = 'path_to_your_file';

// Imports the Google Cloud Translation library
const {TranslationServiceClient} = require('@google-cloud/translate').v3beta1;

// Instantiates a client
const translationClient = new TranslationServiceClient();

const documentInputConfig = {
  gcsSource: {
    inputUri: inputUri,
  },
};

async function translateDocument() {
  // Construct request
  const request = {
    parent: translationClient.locationPath(projectId, location),
    documentInputConfig: documentInputConfig,
    sourceLanguageCode: 'en-US',
    targetLanguageCode: 'sr-Latn',
  };

  // Run request
  const [response] = await translationClient.translateDocument(request);

  console.log(
    `Response: Mime Type - ${response.documentTranslation.mimeType}`
  );
}

translateDocument();

翻译内嵌文档

以下示例通过请求发送内嵌文档。您必须添加内嵌文档翻译的 MIME 类型。

REST 和命令行

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_NUMBER_OR_ID:您的 Google Cloud 项目编号或 ID
  • LOCATION:您要执行此操作的区域。例如 us-central1
  • SOURCE_LANGUAGE:(可选)输入文档的语言代码。如果已知,请设置为语言支持中列出的某种语言代码。
  • TARGET_LANGUAGE:输入文档要翻译的目标语言。设置为语言支持中列出的某种语言代码。
  • MIME_TYPE:源文档的格式,例如 application/pdf
  • INPUT_BYTE_STREAM:输入文档的内容,表示为字节流。
  • OUTPUT_FILE_PREFIX:将存储输出文档的 Cloud Storage 位置。

HTTP 方法和网址:

POST https://translation.googleapis.com/v3beta1/projects/PROJECT_NUMBER_OR_ID/locations/LOCATION:translateDocument

请求 JSON 正文:

{
  "source_language_code": "SOURCE_LANGUAGE",
  "target_language_code": "TARGET_LANGUAGE",
  "document_input_config": {
    "mimeType": "MIME_TYPE",
    "content": "INPUT_BYTE_STREAM"
  },
  "document_output_config": {
    "gcsDestination": {
      "outputUriPrefix": "gs://OUTPUT_FILE_PREFIX"
    }
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "documentTranslation": {
    "byteStreamOutputs": ["BYTE_STREAM"],
    "mimeType": "MIME_TYPE"
  },
  "model": "projects/PROJECT_NUMBER/locations/LOCATION/models/general/nmt"
}

Python

在试用此示例之前,请按照《Translation 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 Translation Python API 参考文档

from google.cloud import translate_v3beta1 as translate

def translate_document(project_id: str, file_path: str):

    client = translate.TranslationServiceClient()

    location = "us-central1"

    parent = f"projects/{project_id}/locations/{location}"

    # Supported file types: https://cloud.google.com/translate/docs/supported-formats
    with open(file_path, "rb") as document:
        document_content = document.read()

    document_input_config = {
        "content": document_content,
        "mime_type": "application/pdf",
    }

    response = client.translate_document(
        request={
            "parent": parent,
            "target_language_code": "fr-FR",
            "document_input_config": document_input_config,
        }
    )

    # To view translated document, write `response.document_translation.byte_stream_outputs` to file.
    # If not provided in the TranslationRequest, the translated file will only be returned through a byte-stream
    # and its output mime type will be the same as the input file's mime type
    print("Response: Detected Language Code - {}".format(response.document_translation.detected_language_code))

使用 AutoML 模型或术语表

您可以使用自己的 AutoML Translation 模型来翻译文档,而不是由 Google 管理的模型。除了指定模型外,您还可以添加术语表,用于处理特定领域的术语。请注意,如果指定了模型或术语库,则必须指定源语言。以下示例使用 AutoML 模型和术语表。如果模型或术语表位于不同的项目中,则您必须具备访问这些资源的相应 IAM 权限。

REST 和命令行

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_NUMBER_OR_ID:您的 Google Cloud 项目编号或 ID
  • LOCATION:您要运行此操作的区域,例如 us-central1。该位置必须与您的模型和/或术语库所在的区域匹配。
  • SOURCE_LANGUAGE:输入文档的语言代码。设置为语言支持中列出的某种语言代码。
  • TARGET_LANGUAGE:输入文档要翻译的目标语言。设置为语言支持中列出的某种语言代码。
  • INPUT_FILE_PATH:输入文档的 Cloud Storage 位置和文件名。
  • OUTPUT_FILE_PREFIX:将存储输出文档的 Cloud Storage 位置。
  • MODEL_PROJECT_ID:模型所在项目的 ID。
  • MODEL_LOCATION:模型所在的区域。
  • MODEL_ID:要使用模型的 ID。
  • GLOSSARY_PROJECT_ID:术语表所在项目的 ID。
  • GLOSSARY_LOCATION:术语表所在的区域。
  • GLOSSARY_ID:要使用的术语表的 ID。

HTTP 方法和网址:

POST https://translation.googleapis.com/v3beta1/projects/PROJECT_NUMBER_OR_ID/locations/LOCATION:translateDocument

请求 JSON 正文:

{
  "source_language_code": "SOURCE_LANGUAGE",
  "target_language_code": "TARGET_LANGUAGE",
  "document_input_config": {
    "gcsSource": {
      "inputUri": "gs://INPUT_FILE_PATH"
    }
  },
  "document_output_config": {
    "gcsDestination": {
      "outputUriPrefix": "gs://OUTPUT_FILE_PREFIX"
    }
  },
  "model": "projects/MODEL_PROJECT_ID/locations/MODEL_LOCATION/models/MODEL_ID",
  "glossary_config": {
    "glossary": "projects/GLOSSARY_PROJECT_ID/locations/MODEL_LOCATION/glossaries/GLOSSARY_ID"
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "documentTranslation": {
    "byteStreamOutputs": ["BYTE_STREAM"],
    "mimeType": "MIME_TYPE"
  },
  "glossary_document_translation": {
    "byteStreamOutputs": ["BYTE_STREAM_USING_GLOSSARY"],
    "mimeType": "MIME_TYPE"
  },
  "model": "projects/MODEL_PROJECT_ID/locations/MODEL_LOCATION/models/MODEL_ID",
  "glossaryConfig": {
    "glossary": "projects/GLOSSARY_PROJECT_ID/locations/MODEL_LOCATION/glossaries/GLOSSARY_ID"
  }
}

翻译文档(批量)

借助批量翻译,您可以在单个请求中将多个文件翻译为多种语言。对于每个请求,您可以发送最多 100 个文件,总内容大小不超过 1 GB 或 1 亿 Unicode 代码点,以最先达到的限额为准。您可以为每种语言指定特定的翻译模型。

翻译多个文档

以下示例包含多个输入配置。每个输入配置都是一个指向 Cloud Storage 中的文件的指针。

REST 和命令行

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_NUMBER_OR_ID:您的 Google Cloud 项目编号或 ID
  • LOCATION:您要执行此操作的区域。例如 us-central1
  • SOURCE_LANGUAGE:输入文档的语言代码。设置为语言支持中列出的某种语言代码。
  • TARGET_LANGUAGE:要将输入文档翻译成的指定语言或目标语言。请使用语言支持页面中列出的语言代码。
  • INPUT_FILE_PATH:一个或多个输入文档的 Cloud Storage 位置和文件名。
  • OUTPUT_FILE_PREFIX:存储所有输出文档的 Cloud Storage 位置。

HTTP 方法和网址:

POST https://translation.googleapis.com/v3beta1/projects/PROJECT_NUMBER_OR_ID/locations/LOCATION:batchTranslateDocument

请求 JSON 正文:

{
  "source_language_code": "SOURCE_LANGUAGE",
  "target_language_codes": ["TARGET_LANGUAGE", ...],
  "input_configs": [
    {
      "gcsSource": {
        "inputUri": "gs://INPUT_FILE_PATH_1"
      }
    },
    {
      "gcsSource": {
        "inputUri": "gs://INPUT_FILE_PATH_2"
      }
    },
    ...
  ],
  "output_config": {
    "gcsDestination": {
      "outputUriPrefix": "gs://OUTPUT_FILE_PREFIX"
    }
  }
}

如需发送您的请求,请展开以下选项之一:

响应包含 [long-running operation](/translate/docs/advanced/long-running-operation) 的 ID。
{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.translation.v3beta1.BatchTranslateDocumentMetadata",
    "state": "RUNNING"
  }
}

Node.js

在试用此示例之前,请按照《Translation 快速入门:使用客户端库》中的 Node.js 设置说明进行操作。如需了解详情,请参阅 Translation Node.js API 参考文档

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const location = 'us-central1';
// const inputUri = 'path_to_your_files';
// const outputUri = 'path_to_your_output_bucket';

// Imports the Google Cloud Translation library
const {TranslationServiceClient} = require('@google-cloud/translate').v3beta1;

// Instantiates a client
const translationClient = new TranslationServiceClient();

const documentInputConfig = {
  gcsSource: {
    inputUri: inputUri,
  },
};

async function batchTranslateDocument() {
  // Construct request
  const request = {
    parent: translationClient.locationPath(projectId, location),
    documentInputConfig: documentInputConfig,
    sourceLanguageCode: 'en-US',
    targetLanguageCodes: ['sr-Latn'],
    inputConfigs: [
      {
        gcsSource: {
          inputUri: inputUri,
        },
      },
    ],
    outputConfig: {
      gcsDestination: {
        outputUriPrefix: outputUri,
      },
    },
  };

  // Batch translate documents using a long-running operation.
  // You can wait for now, or get results later.
  const [operation] = await translationClient.batchTranslateDocument(request);

  // Wait for operation to complete.
  const [response] = await operation.promise();

  console.log(`Total Pages: ${response.totalPages}`);
}

batchTranslateDocument();

Python

在试用此示例之前,请按照《Translation 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 Translation Python API 参考文档


from google.cloud import translate_v3beta1 as translate

def batch_translate_document(
    input_uri: str,
    output_uri: str,
    project_id: str,
    timeout=180,
):

    client = translate.TranslationServiceClient()

    # The ``global`` location is not supported for batch translation
    location = "us-central1"

    # Google Cloud Storage location for the source input. This can be a single file
    # (for example, ``gs://translation-test/input.docx``) or a wildcard
    # (for example, ``gs://translation-test/*``).
    # Supported file types: https://cloud.google.com/translate/docs/supported-formats
    gcs_source = {"input_uri": input_uri}

    batch_document_input_configs = {
        "gcs_source": gcs_source,
    }
    gcs_destination = {"output_uri_prefix": output_uri}
    batch_document_output_config = {"gcs_destination": gcs_destination}
    parent = f"projects/{project_id}/locations/{location}"

    # Supported language codes: https://cloud.google.com/translate/docs/language
    operation = client.batch_translate_document(
        request={
            "parent": parent,
            "source_language_code": "en-US",
            "target_language_codes": ["fr-FR"],
            "input_configs": [batch_document_input_configs],
            "output_config": batch_document_output_config,
        }
    )

    print("Waiting for operation to complete...")
    response = operation.result(timeout)

    print("Total Pages: {}".format(response.total_pages))

使用 AutoML 模型或术语表

您可以使用自己的 AutoML Translation 模型来翻译文档,而不是由 Google 管理的模型。除了指定模型外,您还可以添加术语表,用于处理特定领域的术语。请注意,如果指定了模型或术语库,则必须指定源语言。以下示例使用 AutoML 模型和术语表。您最多可以指定 10 种目标语言及其模型和术语表。

如果您为某些目标语言指定模型,而不为其他目标语言指定模型,则文档翻译会使用 Google 管理的模型以未指定的语言。同样,如果您为某些目标语言指定了术语表,则文档翻译功能不会对未指定的语言使用任何术语表。

REST 和命令行

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_NUMBER_OR_ID:您的 Google Cloud 项目编号或 ID
  • LOCATION:您要运行此操作的区域,例如 us-central1。该位置必须与您的模型和/或术语库所在的区域匹配。
  • SOURCE_LANGUAGE:输入文档的语言代码。设置为语言支持中列出的某种语言代码。
  • TARGET_LANGUAGE:要将输入文档翻译成的指定语言或目标语言。请使用语言支持页面中列出的语言代码。
  • INPUT_FILE_PATH:一个或多个输入文档的 Cloud Storage 位置和文件名。
  • OUTPUT_FILE_PREFIX:存储所有输出文档的 Cloud Storage 位置。
  • MODEL_PROJECT_ID:模型所在项目的 ID。
  • MODEL_LOCATION:模型所在的区域。
  • MODEL_ID:要使用模型的 ID。
  • GLOSSARY_PROJECT_ID:术语表所在项目的 ID。
  • GLOSSARY_LOCATION:术语表所在的区域。
  • GLOSSARY_ID:要使用的术语表的 ID。

HTTP 方法和网址:

POST https://translation.googleapis.com/v3beta1/projects/PROJECT_NUMBER_OR_ID/locations/LOCATION:translateDocument

请求 JSON 正文:

{
  "source_language_code": "SOURCE_LANGUAGE",
  "target_language_codes": "[TARGET_LANGUAGE, ...]",
  "input_configs": [
    {
      "gcsSource": {
        "inputUri": "gs://INPUT_FILE_PATH"
      }
    }
  ],
  "output_config": {
    "gcsDestination": {
      "outputUriPrefix": "gs://OUTPUT_FILE_PREFIX"
    }
  },
  "models": {
    "TARGET_LANGUAGE": "projects/MODEL_PROJECT_ID/locations/MODEL_LOCATION/models/MODEL_ID",
    ...
  },
  "glossaries": {
    "TARGET_LANGUAGE": {
      "glossary": "projects/GLOSSARY_PROJECT_ID/locations/MODEL_LOCATION/glossaries/GLOSSARY_ID"
    },
    ...
  }
}

如需发送您的请求,请展开以下选项之一:

响应包含 [long-running operation](/translate/docs/advanced/long-running-operation) 的 ID。
{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.translation.v3beta1.BatchTranslateDocumentMetadata",
    "state": "RUNNING"
  }
}

后续步骤

  • 文档翻译按页计费。如需了解详情,请参阅价格