Destinatari: Questa guida è pensata per utenti interni Microsoft o team che hanno accesso alle credenziali necessarie per l’app GitHub Co-op Translator preconfigurata oppure che possono creare una propria app GitHub personalizzata.
Automatizza la traduzione della documentazione del tuo repository in modo semplice con l’azione GitHub Co-op Translator. Questa guida ti accompagna nella configurazione dell’azione per creare automaticamente pull request con le traduzioni aggiornate ogni volta che i tuoi file Markdown sorgente o le immagini vengono modificati.
[!IMPORTANT]
Scegliere la guida giusta:
Questa guida spiega la configurazione tramite GitHub App ID e chiave privata. Di solito serve questo metodo “Guida per l’organizzazione” se:
GITHUB_TOKENcon permessi limitati: Le impostazioni della tua organizzazione o del repository limitano i permessi predefiniti concessi alGITHUB_TOKENstandard. In particolare, se ilGITHUB_TOKENnon ha i permessi necessari diwrite(comecontents: writeopull-requests: write), il workflow nella Guida pubblica fallirà per mancanza di permessi. Usare una GitHub App dedicata con permessi espliciti supera questa limitazione.Se quanto sopra non ti riguarda:
Se il
GITHUB_TOKENstandard ha permessi sufficienti nel tuo repository (cioè non sei bloccato da restrizioni organizzative), usa la Guida pubblica con GITHUB_TOKEN. La guida pubblica non richiede App ID o chiavi private e si basa solo sulGITHUB_TOKENstandard e sui permessi del repository.
Prima di configurare l’azione GitHub, assicurati di avere pronte le credenziali del servizio AI necessario.
1. Obbligatorio: Credenziali del modello linguistico AI Ti servono le credenziali per almeno uno dei modelli linguistici supportati:
2. Opzionale: Credenziali Computer Vision (per traduzione immagini)
Segui questi passaggi per configurare l’azione GitHub Co-op Translator nel tuo repository:
Il workflow usa l’autenticazione tramite GitHub App per interagire in modo sicuro con il tuo repository (ad esempio, per creare pull request) per tuo conto. Scegli una delle opzioni:
Vai alla pagina della GitHub App Co-op Translator.
Seleziona Install e scegli l’account o l’organizzazione dove si trova il repository di destinazione.

Scegli Only select repositories e seleziona il repository di destinazione (es. PhiCookBook). Clicca su Install. Potresti dover autenticarti.

1164076..pem della chiave privata dal referente. Tratta questa chiave come una password e conservala in modo sicuro.Devi aggiungere le credenziali della GitHub App e del servizio AI come segreti criptati nelle impostazioni del repository.
Vai al repository GitHub di destinazione (es. PhiCookBook).
Vai su Settings > Secrets and variables > Actions.
Sotto Repository secrets, clicca su New repository secret per ciascun segreto elencato qui sotto.

Segreti richiesti (per autenticazione GitHub App):
| Nome segreto | Descrizione | Fonte valore |
|---|---|---|
GH_APP_ID |
L’App ID della GitHub App (dal Passo 1). | Impostazioni GitHub App |
GH_APP_PRIVATE_KEY |
Tutto il contenuto del file .pem scaricato. |
File .pem (dal Passo 1) |
Segreti servizio AI (aggiungi TUTTI quelli necessari in base ai prerequisiti):
| Nome segreto | Descrizione | Fonte valore |
|---|---|---|
AZURE_AI_SERVICE_API_KEY |
Chiave per Azure AI Service (Computer Vision) | Azure AI Foundry |
AZURE_AI_SERVICE_ENDPOINT |
Endpoint per Azure AI Service (Computer Vision) | Azure AI Foundry |
AZURE_OPENAI_API_KEY |
Chiave per Azure OpenAI service | Azure AI Foundry |
AZURE_OPENAI_ENDPOINT |
Endpoint per Azure OpenAI service | Azure AI Foundry |
AZURE_OPENAI_MODEL_NAME |
Nome del tuo modello Azure OpenAI | Azure AI Foundry |
AZURE_OPENAI_CHAT_DEPLOYMENT_NAME |
Nome della distribuzione Azure OpenAI | Azure AI Foundry |
AZURE_OPENAI_API_VERSION |
Versione API per Azure OpenAI | Azure AI Foundry |
OPENAI_API_KEY |
API Key per OpenAI | OpenAI Platform |
OPENAI_ORG_ID |
ID organizzazione OpenAI | OpenAI Platform |
OPENAI_CHAT_MODEL_ID |
ID modello specifico OpenAI | OpenAI Platform |
OPENAI_BASE_URL |
Base URL API personalizzata OpenAI | OpenAI Platform |

Infine, crea il file YAML che definisce il workflow automatico.
Nella directory principale del repository, crea la cartella .github/workflows/ se non esiste.
All’interno di .github/workflows/, crea un file chiamato co-op-translator.yml.
Incolla il seguente contenuto in 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, DEVI controllare e modificare la lista dei codici lingua nel comando translate -l "..." -y in base alle esigenze del tuo progetto. La lista di esempio (ar de es...) va sostituita o adattata.on:): Il trigger attuale avvia il workflow ad ogni push su main. Per repository grandi, valuta di aggiungere un filtro paths: (vedi esempio commentato nel YAML) per eseguire il workflow solo quando cambiano i file rilevanti (es. documentazione sorgente), risparmiando minuti di esecuzione.commit-message, title, body, nome del branch e labels nel passaggio Create Pull Request se necessario.AZURE_OPENAI_...) prima della scadenza per evitare errori nel workflow.[!WARNING]
Limite di tempo runner GitHub-hosted:
I runner GitHub-hosted comeubuntu-latesthanno un limite massimo di esecuzione di 6 ore.
Per repository di documentazione molto grandi, se il processo di traduzione supera le 6 ore, il workflow verrà terminato automaticamente.
Per evitarlo, valuta:
- L’uso di un runner self-hosted (senza limiti di tempo)
- La riduzione del numero di lingue di destinazione per ogni esecuzione
Una volta che il file co-op-translator.yml è stato inserito nel tuo branch principale (o nel branch specificato nel trigger on:), il workflow si avvierà automaticamente ogni volta che vengono apportate modifiche a quel branch (e corrispondono al filtro paths, se configurato).
Se vengono generate o aggiornate traduzioni, l’azione creerà automaticamente una Pull Request con le modifiche, pronta per la revisione e la fusione.
Disclaimer: Questo documento è stato tradotto utilizzando il servizio di traduzione AI Co-op Translator. Pur impegnandoci per garantire l’accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall’uso di questa traduzione.