вариант

azure-ai-translation-document-py

microsoft/skills microsoft/skills

Переводите документы Word, PDF, Excel, PowerPoint и другие в больших объемах с помощью SDK Azure AI Document Translation с сохранением форматирования.

...Расширить все
0
Обновлено время 18 сентября 2026 г.

SDK Azure AI для перевода документов на языке Python

Клиентская библиотека для службы перевода документов Azure AI Translator, предназначенная для пакетного перевода документов с сохранением форматирования.

Установка

pip install azure-ai-translation-document

Переменные среды

AZURE_DOCUMENT_TRANSLATION_ENDPOINT=https://.cognitiveservices.azure.com  # Требуется для всех методов аутентификации
# Хранилище исходных и целевых документов
AZURE_SOURCE_CONTAINER_URL=https://.blob.core.windows.net/? # Требуется для всех методов аутентификации
AZURE_TARGET_CONTAINER_URL=https://.blob.core.windows.net/? # Требуется для всех методов аутентификации
AZURE_TOKEN_CREDENTIALS=prod # Требуется только в том случае, если DefaultAzureCredential используется в производственной среде
AZURE_DOCUMENT_TRANSLATION_KEY= # Требуется только для приведенного ниже пути аутентификации с использованием устаревшего API-ключа

Аутентификация и жизненный цикл

🔑 К каждому приведённому ниже примеру кода применяются два правила:

  1. Предпочтительно использовать DefaultAzureCredential. Он работает локально (Azure CLI / VS Code / Developer CLI) и в Azure (управляемая идентичность, идентичность рабочей нагрузки) без изменения кода. Избегайте строк подключения, учетных записей и ключей API — они обходят аудит и ротацию Entra.
    • Локальная разработка: DefaultAzureCredential работает без изменений.
    • Производственная среда: установите AZURE_TOKEN_CREDENTIALS=prod (или AZURE_TOKEN_CREDENTIALS=), чтобы ограничить цепочку учетных данных учетными данными, безопасными для производственной среды.
  2. Оберните каждый клиент в менеджер контекста, чтобы HTTP-транспорт, сокеты и кэши токенов освобождались детерминированно:
    • Синхронный режим: с (...) в качестве клиента:
    • Асинхронный режим: async с (...) в качестве клиента: и async с DefaultAzureCredential() в качестве учетных данных: (из azure.identity.aio)

В фрагментах кода эту настройку можно сократить, но в производственном коде всегда следует соблюдать оба правила.

import os
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
from azure.ai.translation.document import DocumentTranslationClient

# Локальная разработка: DefaultAzureCredential. Производственная среда: установите AZURE_TOKEN_CREDENTIALS=prod или AZURE_TOKEN_CREDENTIALS=
credential = DefaultAzureCredential(require_envvar=True)
# Или используйте конкретные учетные данные напрямую в производственной среде:
# См. https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()

with DocumentTranslationClient(
    endpoint=os.environ["AZURE_DOCUMENT_TRANSLATION_ENDPOINT"],
    credential=credential,
) as client:
    statuses = list(client.list_translation_statuses())

Устаревшее: ключ API (существующие развертывания с использованием ключей)

В новом коде следует использовать приведённый выше объект `DefaultAzureCredential`. Используйте `AzureKeyCredential` только в том случае, если у вас есть существующее развёртывание с использованием ключей, которое ещё не перенесено на Entra ID — например, в регулируемых средах, где ещё продолжается внедрение Entra.

import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.translation.document import DocumentTranslationClient, SingleDocumentTranslationClient

with DocumentTranslationClient(
    endpoint=os.environ["AZURE_DOCUMENT_TRANSLATION_ENDPOINT"],
    credential=AzureKeyCredential(os.environ["AZURE_DOCUMENT_TRANSLATION_KEY"]),
) as client:
    statuses = list(client.list_translation_statuses())

# SingleDocumentTranslationClient принимает те же учетные данные на основе ключа.

Базовый перевод документа

from azure.ai.translation.document import DocumentTranslationInput, TranslationTarget

source_url = os.environ["AZURE_SOURCE_CONTAINER_URL"]
target_url = os.environ["AZURE_TARGET_CONTAINER_URL"]

# Запуск задания перевода
poller = client.begin_translation(
    inputs=[
        DocumentTranslationInput(
            source_url=source_url,
            targets=[
                TranslationTarget(
                    target_url=target_url,
                    language="es"  # Перевести на испанский
                )
            ]
        )
    ]
)

# Ожидание завершения
result = poller.result()

print(f"Статус: {poller.status()}")
print(f"Переведенные документы: {poller.details.documents_succeeded_count}")
print(f"Неудачные переводы: {poller.details.documents_failed_count}")

Несколько языков перевода

poller = client.begin_translation(
    inputs=[
        DocumentTranslationInput(
            source_url=source_url,
            targets=[
                TranslationTarget(target_url=target_url_es, language="es"),
                TranslationTarget(target_url=target_url_fr, language="fr"),
                TranslationTarget(target_url=target_url_de, language="de")
            ]
        )
    ]
)

Перевод одного документа

from azure.ai.translation.document import SingleDocumentTranslationClient
from azure.identity import DefaultAzureCredential

with open("document.docx", "rb") as f:
    document_content = f.read()

with SingleDocumentTranslationClient(endpoint, DefaultAzureCredential()) as single_client:
    result = single_client.translate(
        body=document_content,
        target_language="es",
        content_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document"
    )

# Сохранить переведённый документ
with open("document_es.docx", "wb") as f:
    f.write(result)

Проверить статус перевода

# Получить все операции перевода
operations = client.list_translation_statuses()

for op in operations:
    print(f"Идентификатор операции: {op.id}")
    print(f"Статус: {op.status}")
    print(f"Создано: {op.created_on}")
    print(f"Всего документов: {op.documents_total_count}")
    print(f"Успешно: {op.documents_succeeded_count}")
    print(f"Неудачно: {op.documents_failed_count}")

Список статусов документов

# Получить статусы отдельных документов в задании
operation_id = poller.id
document_statuses = client.list_document_statuses(operation_id)

for doc in document_statuses:
    print(f"Документ: {doc.source_document_url}")
    print(f"  Статус: {doc.status}")
    print(f"  Переведено на: {doc.translated_to}")
    if doc.error:
        print(f"  Ошибка: {doc.error.message}")

Отмена перевода

# Отменить выполняющийся перевод
client.cancel_translation(operation_id)

Использование глоссария

from azure.ai.translation.document import TranslationGlossary

poller = client.begin_translation(
    inputs=[
        DocumentTranslationInput(
            source_url=source_url,
            targets=[
                TranslationTarget(
                    target_url=target_url,
                    language="es",
                    glossaries=[
                        TranslationGlossary(
                            glossary_url="https://.blob.core.windows.net/glossary/terms.csv?",
                            file_format="csv"
                        )
                    ]
                )
            ]
        )
    ]
)

Поддерживаемые форматы документов

# Получить поддерживаемые форматы
formats = client.get_supported_document_formats()

for fmt in formats:
    print(f"Формат: {fmt.format}")
    print(f"  Расширения: {fmt.file_extensions}")
    print(f"  Типы содержимого: {fmt.content_types}")

Поддерживаемые языки

# Получить поддерживаемые языки
languages = client.get_supported_languages()

for lang in languages:
    print(f"Язык: {lang.name} ({lang.code})")

Асинхронный клиент

from azure.ai.translation.document.aio import DocumentTranslationClient
from azure.identity.aio import DefaultAzureCredential

async def translate_documents():
    async with DefaultAzureCredential() as credential:
        async with DocumentTranslationClient(
            endpoint=endpoint,
            credential=credential,
        ) as client:
            poller = await client.begin_translation(inputs=[...])
            result = await poller.result()

Поддерживаемые форматы

Категория Форматы
Документы DOCX, PDF, PPTX, XLSX, HTML, TXT, RTF
Структурированные CSV, TSV, JSON, XML
Локализация XLIFF, XLF, MHTML

Требования к хранению

  • Контейнеры исходных и целевых данных должны находиться в хранилище Azure Blob Storage
  • Используйте токены SAS с соответствующими разрешениями:
    • Источник: чтение, перечисление
    • Целевой: запись, перечень

Рекомендации

  1. Выберите синхронный ИЛИ асинхронный режим и придерживайтесь его. Не смешивайте синхронные клиенты azure.xxx с асинхронными клиентами azure.xxx.aio в одном пути вызова. Выбирайте один режим на модуль.
  2. Всегда используйте менеджеры контекста для клиентов и асинхронных учетных данных. Оборачивайте каждого клиента с помощью Client(...) as client: (синхронный режим) или асинхронного режима с помощью Client(...) as client: (асинхронный режим). Для асинхронного режима DefaultAzureCredential из azure.identity.aio также используйте async с указом credential:, чтобы токены и транспортные данные очищались.
  3. Используйте токены SAS с минимально необходимыми разрешениями
  4. Отслеживайте длительные операции с помощью poller.status()
  5. Обрабатывайте ошибки на уровне документов, просматривая статусы документов
  6. Используйте глоссарии для терминологии, специфичной для конкретной области
  7. Используйтеотдельные целевые контейнеры для каждого языка
  8. Используйте асинхронный клиент для выполнения нескольких заданий одновременно
  9. Перед отправкой документовпроверяйте поддерживаемые форматы
Посмотреть на GitHub
---
name: azure-ai-translation-document-py
description: Translate Word, PDF, Excel, PowerPoint, and other documents at scale using Azure AI Document Translation SDK with format preservation.
license: MIT
---

# Azure AI Document Translation SDK for Python

Client library for Azure AI Translator document translation service for batch document translation with format preservation.

## Installation

```bash
pip install azure-ai-translation-document
```

## Environment Variables

```bash
AZURE_DOCUMENT_TRANSLATION_ENDPOINT=https://<resource>.cognitiveservices.azure.com  # Required for all auth methods
# Storage for source and target documents
AZURE_SOURCE_CONTAINER_URL=https://<storage>.blob.core.windows.net/<container>?<sas>  # Required for all auth methods
AZURE_TARGET_CONTAINER_URL=https://<storage>.blob.core.windows.net/<container>?<sas>  # Required for all auth methods
AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
AZURE_DOCUMENT_TRANSLATION_KEY=<your-api-key>  # Only required for the legacy API-key auth path below
```

## Authentication & Lifecycle

> **🔑 Two rules apply to every code sample below:**
>
> 1. **Prefer `DefaultAzureCredential`.** It works locally (Azure CLI / VS Code / Developer CLI) and in Azure (managed identity, workload identity) with no code change. Avoid connection strings, account/API keys — they bypass Entra audit and rotation.
>    - Local dev: `DefaultAzureCredential` works as-is.
>    - Production: set `AZURE_TOKEN_CREDENTIALS=prod` (or `AZURE_TOKEN_CREDENTIALS=<specific_credential>`) to constrain the credential chain to production-safe credentials.
> 2. **Wrap every client in a context manager** so HTTP transports, sockets, and token caches are released deterministically:
>    - Sync: `with <Client>(...) as client:`
>    - Async: `async with <Client>(...) as client:` **and** `async with DefaultAzureCredential() as credential:` (from `azure.identity.aio`)
>
> Snippets may abbreviate this setup, but production code should always follow both rules.

```python
import os
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
from azure.ai.translation.document import DocumentTranslationClient

# Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>
credential = DefaultAzureCredential(require_envvar=True)
# Or use a specific credential directly in production:
# See https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()

with DocumentTranslationClient(
    endpoint=os.environ["AZURE_DOCUMENT_TRANSLATION_ENDPOINT"],
    credential=credential,
) as client:
    statuses = list(client.list_translation_statuses())
```

### Legacy: API Key (existing keyed deployments)

New code should use `DefaultAzureCredential` above. Use `AzureKeyCredential` only if you have an existing keyed deployment that hasn't been migrated to Entra ID yet — for example, regulated environments still completing their Entra rollout.

```python
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.translation.document import DocumentTranslationClient, SingleDocumentTranslationClient

with DocumentTranslationClient(
    endpoint=os.environ["AZURE_DOCUMENT_TRANSLATION_ENDPOINT"],
    credential=AzureKeyCredential(os.environ["AZURE_DOCUMENT_TRANSLATION_KEY"]),
) as client:
    statuses = list(client.list_translation_statuses())

# SingleDocumentTranslationClient accepts the same key-based credential.
```

## Basic Document Translation

```python
from azure.ai.translation.document import DocumentTranslationInput, TranslationTarget

source_url = os.environ["AZURE_SOURCE_CONTAINER_URL"]
target_url = os.environ["AZURE_TARGET_CONTAINER_URL"]

# Start translation job
poller = client.begin_translation(
    inputs=[
        DocumentTranslationInput(
            source_url=source_url,
            targets=[
                TranslationTarget(
                    target_url=target_url,
                    language="es"  # Translate to Spanish
                )
            ]
        )
    ]
)

# Wait for completion
result = poller.result()

print(f"Status: {poller.status()}")
print(f"Documents translated: {poller.details.documents_succeeded_count}")
print(f"Documents failed: {poller.details.documents_failed_count}")
```

## Multiple Target Languages

```python
poller = client.begin_translation(
    inputs=[
        DocumentTranslationInput(
            source_url=source_url,
            targets=[
                TranslationTarget(target_url=target_url_es, language="es"),
                TranslationTarget(target_url=target_url_fr, language="fr"),
                TranslationTarget(target_url=target_url_de, language="de")
            ]
        )
    ]
)
```

## Translate Single Document

```python
from azure.ai.translation.document import SingleDocumentTranslationClient
from azure.identity import DefaultAzureCredential

with open("document.docx", "rb") as f:
    document_content = f.read()

with SingleDocumentTranslationClient(endpoint, DefaultAzureCredential()) as single_client:
    result = single_client.translate(
        body=document_content,
        target_language="es",
        content_type="application/vnd.openxmlformats-officedocument.wordprocessingml.document"
    )

# Save translated document
with open("document_es.docx", "wb") as f:
    f.write(result)
```

## Check Translation Status

```python
# Get all translation operations
operations = client.list_translation_statuses()

for op in operations:
    print(f"Operation ID: {op.id}")
    print(f"Status: {op.status}")
    print(f"Created: {op.created_on}")
    print(f"Total documents: {op.documents_total_count}")
    print(f"Succeeded: {op.documents_succeeded_count}")
    print(f"Failed: {op.documents_failed_count}")
```

## List Document Statuses

```python
# Get status of individual documents in a job
operation_id = poller.id
document_statuses = client.list_document_statuses(operation_id)

for doc in document_statuses:
    print(f"Document: {doc.source_document_url}")
    print(f"  Status: {doc.status}")
    print(f"  Translated to: {doc.translated_to}")
    if doc.error:
        print(f"  Error: {doc.error.message}")
```

## Cancel Translation

```python
# Cancel a running translation
client.cancel_translation(operation_id)
```

## Using Glossary

```python
from azure.ai.translation.document import TranslationGlossary

poller = client.begin_translation(
    inputs=[
        DocumentTranslationInput(
            source_url=source_url,
            targets=[
                TranslationTarget(
                    target_url=target_url,
                    language="es",
                    glossaries=[
                        TranslationGlossary(
                            glossary_url="https://<storage>.blob.core.windows.net/glossary/terms.csv?<sas>",
                            file_format="csv"
                        )
                    ]
                )
            ]
        )
    ]
)
```

## Supported Document Formats

```python
# Get supported formats
formats = client.get_supported_document_formats()

for fmt in formats:
    print(f"Format: {fmt.format}")
    print(f"  Extensions: {fmt.file_extensions}")
    print(f"  Content types: {fmt.content_types}")
```

## Supported Languages

```python
# Get supported languages
languages = client.get_supported_languages()

for lang in languages:
    print(f"Language: {lang.name} ({lang.code})")
```

## Async Client

```python
from azure.ai.translation.document.aio import DocumentTranslationClient
from azure.identity.aio import DefaultAzureCredential

async def translate_documents():
    async with DefaultAzureCredential() as credential:
        async with DocumentTranslationClient(
            endpoint=endpoint,
            credential=credential,
        ) as client:
            poller = await client.begin_translation(inputs=[...])
            result = await poller.result()
```

## Supported Formats

| Category | Formats |
|----------|---------|
| Documents | DOCX, PDF, PPTX, XLSX, HTML, TXT, RTF |
| Structured | CSV, TSV, JSON, XML |
| Localization | XLIFF, XLF, MHTML |

## Storage Requirements

- Source and target containers must be Azure Blob Storage
- Use SAS tokens with appropriate permissions:
  - Source: Read, List
  - Target: Write, List

## Best Practices

1. **Pick sync OR async and stay consistent.** Do not mix `azure.xxx` sync clients with `azure.xxx.aio` async clients in the same call path. Choose one mode per module.
2. **Always use context managers for clients and async credentials.** Wrap every client in `with Client(...) as client:` (sync) or `async with Client(...) as client:` (async). For async `DefaultAzureCredential` from `azure.identity.aio`, also use `async with credential:` so tokens and transports are cleaned up.
3. **Use SAS tokens** with minimal required permissions
4. **Monitor long-running operations** with `poller.status()`
5. **Handle document-level errors** by iterating document statuses
6. **Use glossaries** for domain-specific terminology
7. **Separate target containers** for each language
8. **Use async client** for multiple concurrent jobs
9. **Check supported formats** before submitting documents

Все файлы

0 файлов

Установить azure-ai-translation-document-py

Скачайте файлы навыков и распакуйте их в каталог .claude/skills/.

Скачать ZIP

Клонируйте репозиторий и скопируйте файлы навыка в свой проект.

git clone https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-python/skills/azure-ai-translation-document-py # Copy SKILL.md to your .claude/skills/ directory

Копировать Копировать
Быстрая настройка: Скопируйте папку со скиллом в каталог .claude/skills/ Claude автоматически обнаружит и запустит этот скилл
Репозиторий microsoft/skills

Похожие навыки

web-search
Обновлено время 29 июня 2026 г.
webapp-testing
Обновлено время 29 июня 2026 г.
lark-base
Обновлено время 5 июля 2026 г.
agentmail
Обновлено время 29 июня 2026 г.
OR