Abre una solicitud de tirada tras cada partida
- id: translate uses: IEvangelist/resource-translator@v3 with: sourceLocale: en subscriptionKey: ${{ secrets.TRANSLATOR_KEY }} endpoint: ${{ secrets.TRANSLATOR_ENDPOINT }} region: ${{ secrets.TRANSLATOR_REGION }}
- if: steps.translate.outputs.has-new-translations == 'true' uses: peter-evans/create-pull-request@v7 with: branch: machine-translation title: ${{ steps.translate.outputs.summary-title }} body: ${{ steps.translate.outputs.summary-details }} labels: localizationMonorepos: traducción de alcance por paquete
with: sourceLocale: en include: | apps/web/**/*.en.resx packages/shared/**/*.en.json exclude: | **/dist/** **/__tests__/**Glosario de nombres de marcas y términos de productos
Deja un .github/resource-translator.yml en el repositorio:
glossary: Acme: Contoso Octocat: Octocat ".NET": ".NET" "C++": "C++"Los términos del glosario se aplican después traducción, por lo que la salida traducida automáticamente mantiene tu marca preferida incluso cuando el modelo la cambió por un sinónimo.
Categoría de traductor personalizado (industria / dominio)
with: sourceLocale: en subscriptionKey: ${{ secrets.TRANSLATOR_KEY }} endpoint: ${{ secrets.TRANSLATOR_ENDPOINT }} categoryId: 1234abcd-5678-90ef-... Entrena una categoría de Custom Translator de Azure en un corpus que capture tu vocabulario y tono del sector (legal, médico, marketing, ingeniería interna, etc.) y aprueba su ID por categoryId. Esta es la palanca de tono más potente que ofrece Azure.
Control de tono + respaldo estricto
# .github/resource-translator.yml# Industry / domain — choose your tone via a Custom Translator categorycategoryId: legal-en
# Treat profanity strictly for content aimed at younger audiencesprofanityAction: MarkedprofanityMarker: Tag
# Fail the run rather than silently fall back to the general modelallowFallback: false Combina un categoryId de traductor personalizado con profanityAction y allowFallback: false para mantener una voz coherente y falla el flujo de trabajo si la categoría elegida no tiene un despliegue para una de tus localidades objetivo.
Prueba en seco antes de activar el flujo de trabajo
with: dryRun: true failOnError: false La acción sigue emitiendo salidas resumen y un resumen de pasos, pero no se escriben archivos. Combina con failOnError: false para que cada problema aparezca como advertencia mientras iteras.