Público objetivo: Esta guía está dirigida a usuarios internos de Microsoft o equipos que tengan acceso a las credenciales necesarias para la aplicación preconstruida Co-op Translator de GitHub o que puedan crear su propia aplicación personalizada de GitHub.
Automatiza la traducción de la documentación de tu repositorio fácilmente usando la Acción de GitHub Co-op Translator. Esta guía te explica cómo configurar la acción para que cree automáticamente pull requests con traducciones actualizadas cada vez que cambien tus archivos Markdown fuente o imágenes.
[!IMPORTANT]
Eligiendo la guía adecuada:
Esta guía detalla la configuración usando un ID de App de GitHub y una clave privada. Normalmente necesitas este método de “Guía para Organizaciones” si:
GITHUB_TOKENtiene permisos restringidos: La configuración de tu organización o repositorio restringe los permisos por defecto otorgados alGITHUB_TOKENestándar. Específicamente, si elGITHUB_TOKENno tiene los permisos dewritenecesarios (comocontents: writeopull-requests: write), el flujo de trabajo de la Guía Pública fallará por permisos insuficientes. Usar una App de GitHub dedicada con permisos explícitos evita esta limitación.Si lo anterior no aplica a tu caso:
Si el
GITHUB_TOKENestándar tiene permisos suficientes en tu repositorio (es decir, no tienes restricciones organizacionales), por favor usa la Guía Pública usando GITHUB_TOKEN. La guía pública no requiere obtener ni gestionar IDs de App ni claves privadas, y se basa únicamente en elGITHUB_TOKENestándar y los permisos del repositorio.
Antes de configurar la Acción de GitHub, asegúrate de tener listas las credenciales necesarias del servicio de IA.
1. Requerido: Credenciales del modelo de lenguaje de IA Necesitas credenciales para al menos uno de los modelos de lenguaje soportados:
2. Opcional: Credenciales de Computer Vision (para traducción de imágenes)
Sigue estos pasos para configurar la Acción de GitHub Co-op Translator en tu repositorio:
El flujo de trabajo utiliza la autenticación de App de GitHub para interactuar de forma segura con tu repositorio (por ejemplo, crear pull requests) en tu nombre. Elige una opción:
Ve a la página de la App de GitHub Co-op Translator.
Selecciona Install y elige la cuenta u organización donde está tu repositorio objetivo.

Elige Only select repositories y selecciona tu repositorio objetivo (por ejemplo, PhiCookBook). Haz clic en Install. Es posible que debas autenticarte.

1164076..pem del contacto responsable. Trata esta clave como una contraseña y mantenla segura.Debes agregar las credenciales de la App de GitHub y las credenciales de tu servicio de IA como secretos cifrados en la configuración de tu repositorio.
Ve a tu repositorio objetivo en GitHub (por ejemplo, PhiCookBook).
Ve a Settings > Secrets and variables > Actions.
En Repository secrets, haz clic en New repository secret para cada secreto de la lista a continuación.

Secretos requeridos (para autenticación de la App de GitHub):
| Nombre del secreto | Descripción | Fuente del valor |
|---|---|---|
GH_APP_ID |
El App ID de la App de GitHub (del Paso 1). | Configuración de la App de GitHub |
GH_APP_PRIVATE_KEY |
El contenido completo del archivo .pem descargado. |
Archivo .pem (del Paso 1) |
Secretos del servicio de IA (agrega TODOS los que apliquen según tus requisitos):
| Nombre del secreto | Descripción | Fuente del valor |
|---|---|---|
AZURE_AI_SERVICE_API_KEY |
Clave para Azure AI Service (Computer Vision) | Azure AI Foundry |
AZURE_AI_SERVICE_ENDPOINT |
Endpoint para Azure AI Service (Computer Vision) | Azure AI Foundry |
AZURE_OPENAI_API_KEY |
Clave para el servicio Azure OpenAI | Azure AI Foundry |
AZURE_OPENAI_ENDPOINT |
Endpoint para el servicio Azure OpenAI | Azure AI Foundry |
AZURE_OPENAI_MODEL_NAME |
Nombre de tu modelo de Azure OpenAI | Azure AI Foundry |
AZURE_OPENAI_CHAT_DEPLOYMENT_NAME |
Nombre de despliegue de Azure OpenAI | Azure AI Foundry |
AZURE_OPENAI_API_VERSION |
Versión de la API de Azure OpenAI | Azure AI Foundry |
OPENAI_API_KEY |
API Key para OpenAI | OpenAI Platform |
OPENAI_ORG_ID |
ID de organización de OpenAI | OpenAI Platform |
OPENAI_CHAT_MODEL_ID |
ID específico del modelo de OpenAI | OpenAI Platform |
OPENAI_BASE_URL |
Base URL personalizada de la API de OpenAI | OpenAI Platform |

Por último, crea el archivo YAML que define el flujo de trabajo automatizado.
En el directorio raíz de tu repositorio, crea el directorio .github/workflows/ si no existe.
Dentro de .github/workflows/, crea un archivo llamado co-op-translator.yml.
Pega el siguiente contenido en 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, DEBES revisar y modificar la lista de códigos de idioma dentro del comando translate -l "..." -y para que coincida con los requisitos de tu proyecto. La lista de ejemplo (ar de es...) debe ser reemplazada o ajustada.on:): El disparador actual se ejecuta en cada push a main. Para repositorios grandes, considera agregar un filtro paths: (ver ejemplo comentado en el YAML) para ejecutar el flujo de trabajo solo cuando cambien archivos relevantes (por ejemplo, documentación fuente), ahorrando minutos de ejecución.commit-message, title, body, nombre de la branch y labels en el paso Create Pull Request si lo necesitas.AZURE_OPENAI_...) antes de que expiren para evitar fallos en el flujo de trabajo.[!WARNING]
Límite de tiempo de los runners alojados por GitHub:
Los runners alojados por GitHub comoubuntu-latesttienen un límite máximo de ejecución de 6 horas.
Para repositorios de documentación grandes, si el proceso de traducción supera las 6 horas, el flujo de trabajo se terminará automáticamente.
Para evitar esto, considera:
- Usar un runner autohospedado (sin límite de tiempo)
- Reducir el número de idiomas objetivo por ejecución
Una vez que el archivo co-op-translator.yml se fusione en tu rama principal (o la rama especificada en el disparador on:), el flujo de trabajo se ejecutará automáticamente cada vez que se hagan cambios en esa rama (y coincidan con el filtro paths, si está configurado).
Si se generan o actualizan traducciones, la acción creará automáticamente un Pull Request con los cambios, listo para tu revisión y fusión.
Descargo de responsabilidad:
Este documento ha sido traducido utilizando el servicio de traducción automática Co-op Translator. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No nos hacemos responsables de cualquier malentendido o interpretación incorrecta que surja del uso de esta traducción.