Целевая аудитория: Это руководство предназначено для внутренних пользователей Microsoft или команд, имеющих доступ к необходимым учетным данным для предустановленного приложения Co-op Translator GitHub App, либо способных создать собственное приложение GitHub App.
Автоматизируйте перевод документации вашего репозитория с помощью GitHub Action Co-op Translator. В этом руководстве описан процесс настройки действия, чтобы автоматически создавать pull-запросы с обновленными переводами при изменении исходных Markdown-файлов или изображений.
[!IMPORTANT]
Выбор подходящего руководства:
В этом руководстве описана настройка с использованием GitHub App ID и приватного ключа. Обычно вам нужен этот способ (“Руководство для организаций”), если:
GITHUB_TOKENимеет ограниченные права: В вашей организации или репозитории права стандартногоGITHUB_TOKENограничены. В частности, еслиGITHUB_TOKENне имеет необходимых правwrite(например,contents: writeилиpull-requests: write), то рабочий процесс из Публичного руководства завершится ошибкой из-за недостаточных прав. Использование отдельного GitHub App с явно заданными правами позволяет обойти это ограничение.Если вышеуказанное к вам не относится:
Если стандартный
GITHUB_TOKENимеет достаточные права в вашем репозитории (то есть нет ограничений со стороны организации), используйте Публичное руководство по настройке с GITHUB_TOKEN. Публичное руководство не требует получения или управления App ID и приватными ключами, а использует только стандартныйGITHUB_TOKENи права репозитория.
Перед настройкой GitHub Action убедитесь, что у вас есть необходимые учетные данные для AI-сервиса.
1. Обязательно: Учетные данные языковой модели AI Вам нужны учетные данные хотя бы для одной поддерживаемой языковой модели:
2. Необязательно: Учетные данные Computer Vision (для перевода текста на изображениях)
Выполните следующие шаги для настройки GitHub Action Co-op Translator в вашем репозитории:
Рабочий процесс использует аутентификацию через GitHub App для безопасного взаимодействия с вашим репозиторием (например, создания pull-запросов) от вашего имени. Выберите один из вариантов:
Перейдите на страницу Co-op Translator GitHub App.
Нажмите Install и выберите аккаунт или организацию, где находится ваш целевой репозиторий.

Выберите Only select repositories и укажите ваш репозиторий (например, PhiCookBook). Нажмите Install. Возможно, потребуется пройти аутентификацию.

1164076..pem у контактного лица-администратора. Относитесь к этому ключу как к паролю и храните его в безопасности.Добавьте учетные данные GitHub App и вашего AI-сервиса как зашифрованные секреты в настройках репозитория.
Перейдите в ваш целевой репозиторий на GitHub (например, PhiCookBook).
Откройте Settings > Secrets and variables > Actions.
В разделе Repository secrets нажмите New repository secret для каждого секрета из списка ниже.

Обязательные секреты (для аутентификации через GitHub App):
| Имя секрета | Описание | Источник значения |
|---|---|---|
GH_APP_ID |
App ID приложения GitHub (из шага 1). | Настройки GitHub App |
GH_APP_PRIVATE_KEY |
Полное содержимое скачанного файла .pem. |
Файл .pem (из шага 1) |
Секреты AI-сервиса (добавьте ВСЕ, которые применимы согласно вашим требованиям):
| Имя секрета | Описание | Источник значения |
|---|---|---|
AZURE_AI_SERVICE_API_KEY |
Ключ для Azure AI Service (Computer Vision) | Azure AI Foundry |
AZURE_AI_SERVICE_ENDPOINT |
Endpoint для Azure AI Service (Computer Vision) | Azure AI Foundry |
AZURE_OPENAI_API_KEY |
Ключ для Azure OpenAI | Azure AI Foundry |
AZURE_OPENAI_ENDPOINT |
Endpoint для Azure OpenAI | Azure AI Foundry |
AZURE_OPENAI_MODEL_NAME |
Имя вашей модели Azure OpenAI | Azure AI Foundry |
AZURE_OPENAI_CHAT_DEPLOYMENT_NAME |
Имя деплоймента Azure OpenAI | Azure AI Foundry |
AZURE_OPENAI_API_VERSION |
Версия API для Azure OpenAI | Azure AI Foundry |
OPENAI_API_KEY |
API Key для OpenAI | OpenAI Platform |
OPENAI_ORG_ID |
ID организации OpenAI | OpenAI Platform |
OPENAI_CHAT_MODEL_ID |
ID конкретной модели OpenAI | OpenAI Platform |
OPENAI_BASE_URL |
Пользовательский Base URL для OpenAI API | OpenAI Platform |

Теперь создайте YAML-файл, определяющий автоматизированный рабочий процесс.
В корневой директории вашего репозитория создайте папку .github/workflows/, если она отсутствует.
Внутри .github/workflows/ создайте файл с именем co-op-translator.yml.
Вставьте следующий контент в co-op-translator.yml.
name: Co-op Translator
on:
push:
branches:
- main
jobs:
co-op-translator:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install Co-op Translator
run: |
python -m pip install --upgrade pip
pip install co-op-translator
- name: Run Co-op Translator
env:
PYTHONIOENCODING: utf-8
# Azure AI Service Credentials
AZURE_AI_SERVICE_API_KEY: $
AZURE_AI_SERVICE_ENDPOINT: $
# Azure OpenAI Credentials
AZURE_OPENAI_API_KEY: $
AZURE_OPENAI_ENDPOINT: $
AZURE_OPENAI_MODEL_NAME: $
AZURE_OPENAI_CHAT_DEPLOYMENT_NAME: $
AZURE_OPENAI_API_VERSION: $
# OpenAI Credentials
OPENAI_API_KEY: $
OPENAI_ORG_ID: $
OPENAI_CHAT_MODEL_ID: $
OPENAI_BASE_URL: $
run: |
# =====================================================================
# IMPORTANT: Set your target languages here (REQUIRED CONFIGURATION)
# =====================================================================
# Example: Translate to Spanish, French, German. Add -y to auto-confirm.
translate -l "es fr de" -y # <--- MODIFY THIS LINE with your desired languages
- name: Authenticate GitHub App
id: generate_token
uses: tibdex/github-app-token@v1
with:
app_id: $
private_key: $
- name: Create Pull Request with translations
uses: peter-evans/create-pull-request@v5
with:
token: $
commit-message: "🌐 Update translations via Co-op Translator"
title: "🌐 Update translations via Co-op Translator"
body: |
This PR updates translations for recent changes to the main branch.
### 📋 Changes included
- Translated contents are available in the `translations/` directory
- Translated images are available in the `translated_images/` directory
---
🌐 Automatically generated by the [Co-op Translator](https://github.com/Azure/co-op-translator) GitHub Action.
branch: update-translations
base: main
labels: translation, automated-pr
delete-branch: true
add-paths: |
translations/
translated_images/
Run Co-op Translator ОБЯЗАТЕЛЬНО проверьте и измените список языковых кодов в команде translate -l "..." -y согласно требованиям вашего проекта. Пример списка (ar de es...) нужно заменить или скорректировать.on:): Сейчас триггер срабатывает при каждом push в main. Для больших репозиториев рекомендуется добавить фильтр paths: (см. пример в комментарии в YAML), чтобы запускать рабочий процесс только при изменении релевантных файлов (например, исходной документации), экономя минуты runner.commit-message, title, body, имя ветки и labels в шаге Create Pull Request.AZURE_OPENAI_...) до истечения срока действия, чтобы избежать сбоев рабочего процесса.[!WARNING]
Ограничение времени выполнения GitHub-hosted runner:
GitHub-hosted runner, такие какubuntu-latest, имеют максимальное ограничение времени выполнения — 6 часов.
Для больших репозиториев с документацией, если процесс перевода займет больше 6 часов, рабочий процесс будет автоматически завершен.
Чтобы избежать этого, рассмотрите варианты:
- Использование self-hosted runner (без ограничения времени)
- Сокращение количества целевых языков за один запуск
После того как файл co-op-translator.yml будет добавлен в вашу основную ветку (или ветку, указанную в триггере on:), рабочий процесс будет автоматически запускаться при каждом пуше в эту ветку (и при совпадении с фильтром paths, если он настроен).
Если переводы будут созданы или обновлены, действие автоматически создаст Pull Request с изменениями, готовыми к вашему рассмотрению и слиянию.
Отказ от ответственности: Этот документ был переведен с помощью сервиса автоматического перевода Co-op Translator. Несмотря на стремление к точности, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется использовать профессиональный человеческий перевод. Мы не несём ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования данного перевода.