Step 1: Wybierz dostawcę tłumaczy
Działanie działa z Azure AI Translator, AWS Translate i Google Cloud Translation za jedną zunifikowaną powierzchnią API. Wybierz jednego dostawcę na uruchomienie z provider wejściem — workflow zachowuje się identycznie niezależnie od dostawcy; Różnią się tylko kwalifikacje. Zobacz Dostawcy tłumaczeń dla pełnego porównania.
Step 2: Dodaj dane uwierzytelniające i workflow
Przechowuj dane uwierzytelniające swojego dostawcy jako sekrety repozytorium GitHub, a następnie utwórz .github/workflows/translate.yml. Wybierz poniżej swojego dostawcę, aby uzyskać jego konkretną konfigurację — reszta procesu jest identyczna.
Azure AI Translator
Azure jest domyślnym dostawcą, więc provider może zostać pominięty. Udostępnij zasób Azure AI Translator w portalu Azure, a następnie przechowuj jego dane uwierzytelniające:
Przechowuj je jako tajemnice repozytorium
TRANSLATOR_KEY— Klucz subskrypcyjny dla zasobu.TRANSLATOR_ENDPOINT— regionalny adres URL końcowy.TRANSLATOR_REGION— region Azure.
Dodaj workflow
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
Ustaw provider na aws. Wolej OIDC przez aws-actions/configure-aws-credentials, aby nie przechowywać długotrwałych sekretów — eksport etapu AWS_REGION dla Ciebie. Aby zamiast tego używać kluczy statycznych, przechowuj:
Przechowuj je jako tajemnice repozytorium
AWS_ACCESS_KEY_ID— Twój identyfikator klucza dostępu AWS.AWS_SECRET_ACCESS_KEY— Twój tajny klucz dostępu do AWS.
Zawsze wymagany jest region — ustaw go awsRegion lub zmienną środowiskową AWS_REGION.
Dodaj workflow
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-translationGoogle Cloud Translation
Ustaw provider na google. Uwierzytelnij się za pomocą danych JSON do konta usługowego lub klucza API — podaj dokładnie jeden:
Przechowuj je jako tajemnice repozytorium
GCP_TRANSLATE_CREDENTIALS— klucz JSON na koncie serwisu (jako ciąg JSON).GCP_TRANSLATE_API_KEY— lub klucz API Google Cloud.
Opcjonalny googleProjectId jest wywnioskowany z kwalifikacji, gdy zostanie pominięty.
Dodaj workflow
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: Commituj plik zasobów źródłowych
Pliki zasobów korzystają z konwencji Name.<sourceLocale>.<ext>. Na przykład Greetings.en.resx po przejściu staje się Greetings.fr.resx, Greetings.de.resx i tak dalej.
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: Sprawdź wyjście
Po zakończeniu pracy akcja ujawnia trzy wyjścia, które możesz przełączyć do opisu PR: summary-title, summary-details i has-new-translations. Na stronie oferty pracy core.summary zapisuje też podsumowanie Markdown.