Step 1: Alege un furnizor de traduceri
Acțiunea funcționează cu Azure AI Translator, AWS Translate și Traducerea Google Cloud în spatele unei singure suprafețe API unificate. Alege un singur furnizor la fiecare rulare cu intrarea provider — fluxul de lucru se comportă identic indiferent de furnizor; Doar acreditările diferă. Vezi Furnizori de traduceri pentru o comparație completă.
Step 2: Adaugă acreditări și un flux de lucru
Stochează acreditările furnizorului tău ca secrete din depozitul GitHub, apoi creează .github/workflows/translate.yml. Selectați furnizorul de mai jos pentru configurația sa specifică — restul fluxului de lucru este identic.
Azure AI Translator
Azure este furnizorul implicit, deci provider pot fi omise. Asigurați o resursă Azure AI Translator în portalul Azure, apoi stochați datele sale de credențiale:
Stochează-le ca secrete ale depozitului
TRANSLATOR_KEY— Cheia de abonament pentru resursă.TRANSLATOR_ENDPOINT— URL-ul endpoint-ului regional.TRANSLATOR_REGION— regiunea Azure a resursei.
Adaugă fluxul de lucru
name: translate
on: push: branches: [main] paths: - "src/**/*.en.resx" - "src/**/*.en.json"
permissions: contents: write pull-requests: write
jobs: translate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - id: translate uses: IEvangelist/resource-translator@v3 with: provider: | azure: subscriptionKey: ${{ secrets.TRANSLATOR_KEY }} endpoint: ${{ secrets.TRANSLATOR_ENDPOINT }} region: ${{ secrets.TRANSLATOR_REGION }} sourceLocale: en toLocales: '["fr","de","es"]' - if: steps.translate.outputs.has-new-translations == 'true' uses: peter-evans/create-pull-request@v7 with: title: ${{ steps.translate.outputs.summary-title }} body: ${{ steps.translate.outputs.summary-details }} branch: machine-translationAWS Translate
Setează provider pe aws. Preferă OIDC prin aws-actions/configure-aws-credentials astfel încât să nu fie stocate secrete de lungă durată — exporturile în pași AWS_REGION pentru tine. Pentru a folosi chei statice în schimb, stocați:
Stochează-le ca secrete ale depozitului
AWS_ACCESS_KEY_ID— ID-ul cheii de acces AWS.AWS_SECRET_ACCESS_KEY— cheia ta secretă de acces AWS.
O regiune este întotdeauna necesară — setați-o cu awsRegion sau cu variabila de mediu AWS_REGION.
Adaugă fluxul de lucru
name: translate
on: push: branches: [main] paths: - "src/**/*.en.resx" - "src/**/*.en.json"
permissions: id-token: write # for aws-actions/configure-aws-credentials (OIDC) contents: write pull-requests: write
jobs: translate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::123456789012:role/gh-actions-translate aws-region: us-east-1 - id: translate uses: IEvangelist/resource-translator@v3 with: provider: | aws: region: us-east-1 # or rely on AWS_REGION from the step above formality: FORMAL brevity: true sourceLocale: en toLocales: '["fr","de","es"]' - if: steps.translate.outputs.has-new-translations == 'true' uses: peter-evans/create-pull-request@v7 with: title: ${{ steps.translate.outputs.summary-title }} body: ${{ steps.translate.outputs.summary-details }} branch: machine-translationTraducerea Google Cloud
Setează provider pe google. Autentifică fie cu o acreditare JSON de cont de serviciu, fie cu o cheie API — furnizează exact una:
Stochează-le ca secrete ale depozitului
GCP_TRANSLATE_CREDENTIALS— o cheie JSON de cont de serviciu (ca șir JSON).GCP_TRANSLATE_API_KEY— sau o cheie API Google Cloud.
Un googleProjectId opțional este dedus din acreditare atunci când este omis.
Adaugă fluxul de lucru
name: translate
on: push: branches: [main] paths: - "src/**/*.en.resx" - "src/**/*.en.json"
permissions: contents: write pull-requests: write
jobs: translate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - id: translate uses: IEvangelist/resource-translator@v3 with: provider: | google: # Provide EITHER a service-account JSON credential... credentials: ${{ secrets.GCP_TRANSLATE_CREDENTIALS }} # ...OR an API key: # apiKey: ${{ secrets.GCP_TRANSLATE_API_KEY }} model: nmt sourceLocale: en toLocales: '["fr","de","es"]' - if: steps.translate.outputs.has-new-translations == 'true' uses: peter-evans/create-pull-request@v7 with: title: ${{ steps.translate.outputs.summary-title }} body: ${{ steps.translate.outputs.summary-details }} branch: machine-translationStep 3: Confirmă un fișier sursă de resurse
Fișierele de resurse folosesc convenția Name.<sourceLocale>.<ext>. De exemplu, Greetings.en.resx devine Greetings.fr.resx, Greetings.de.resx și așa mai departe după o rundă.
Step 4: Let smart change detection protect your bill
changeDetection defaults to smart and stores a compact .github/resource-translator-state.json manifest in the repo. Commit that file so future runs can reuse stable translations, preserve manual target edits, and send only new, missing, changed, or settings-invalidated keys to the provider. If localized files already exist, run once with snapshotOnly: true to create the manifest without provider calls.
Step 5: Inspectează ieșirea
Odată ce fluxul de lucru se termină, acțiunea expune trei ieșiri pe care le poți conecta într-o descriere PR: summary-title, summary-details și has-new-translations. De asemenea, scrie un rezumat Markdown pe pagina jobului prin core.summary.