Step 1: Elige un proveedor de traducción
La acción funciona con Azure AI Translator, AWS Translate y Traducción de Google Cloud detrás de una sola superficie unificada de API. Elige un único proveedor por ejecución con la entrada provider — el flujo de trabajo se comporta igual independientemente del proveedor; solo difieren las credenciales. Consulta Proveedores de traducción para una comparación completa.
Step 2: Añadir credenciales y un flujo de trabajo
Guarda las credenciales de tu proveedor como secretos del repositorio de GitHub y luego crea .github/workflows/translate.yml. Selecciona a tu proveedor a continuación para su configuración específica — el resto del flujo de trabajo es idéntico.
Azure AI Translator
Azure es el proveedor por defecto, así que provider puede omitirse. Provisiona un recurso Azure AI Translator en el portal Azure y luego almacena sus credenciales:
Almacena estos como secretos de repositorio
TRANSLATOR_KEY— La clave de suscripción para el recurso.TRANSLATOR_ENDPOINT— la URL regional del punto final.TRANSLATOR_REGION— la región Azure del recurso.
Añadir el flujo de trabajo
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
Ponlo provider a aws. Prefiere OIDC a través de aws-actions/configure-aws-credentials para que no se almacenen secretos duraderos — las exportaciones por pasos AWS_REGION para ti. Para usar claves estáticas en su lugar, almacena:
Almacena estos como secretos de repositorio
AWS_ACCESS_KEY_ID— tu ID de clave de acceso AWS.AWS_SECRET_ACCESS_KEY— tu clave secreta de acceso de AWS.
Siempre se requiere una región — configúrala con awsRegion o con la variable de entorno AWS_REGION.
Añadir el flujo de trabajo
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-translationTraducción de Google Cloud
Ponlo provider a google. Autentica con una credencial JSON de la cuenta de servicio o una clave API — proporciona exactamente una:
Almacena estos como secretos de repositorio
GCP_TRANSLATE_CREDENTIALS— una clave JSON de cuenta de servicio (como cadena JSON).GCP_TRANSLATE_API_KEY— o una clave API de Google Cloud.
Se infiere un googleProjectId opcional de la credencial cuando se omite.
Añadir el flujo de trabajo
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: Commit de un archivo de recurso fuente
Los archivos de recursos utilizan la convención Name.<sourceLocale>.<ext>. Por ejemplo, Greetings.en.resx se convierte en Greetings.fr.resx, Greetings.de.resx, y así sucesivamente tras una partida.
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: Inspeccionar la salida
Una vez que termina el flujo de trabajo, la acción expone tres salidas que puedes conectar en una descripción de relaciones públicas: summary-title, summary-details y has-new-translations. También escribe un resumen de Markdown en la página de empleo a través de core.summary.