Abra um pull request após cada execução
- 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: tradução de escopo por pacote
with: sourceLocale: en include: | apps/web/**/*.en.resx packages/shared/**/*.en.json exclude: | **/dist/** **/__tests__/**Glossário para nomes de marcas e termos de produtos
Coloque um .github/resource-translator.yml no repositório:
glossary: Acme: Contoso Octocat: Octocat ".NET": ".NET" "C++": "C++"Termos do glossário são aplicados depois tradução, então a saída traduzida por máquina mantém sua marca preferida mesmo quando o modelo a trocou por um sinônimo.
Categoria de tradutor personalizado (indústria / domínio)
with: sourceLocale: en subscriptionKey: ${{ secrets.TRANSLATOR_KEY }} endpoint: ${{ secrets.TRANSLATOR_ENDPOINT }} categoryId: 1234abcd-5678-90ef-... Treine uma categoria de Custom Translator Azure em um corpus que capture seu vocabulário e tom da indústria (jurídico, médico, marketing, engenharia interna, etc.) e passe seu ID via categoryId. Esta é a alavanca de tom mais forte que Azure oferece.
Controle de tom + recuo estrito
# .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 Combine um categoryId de Tradutor Personalizado com profanityAction e allowFallback: false para garantir uma voz consistente e falhe no fluxo de trabalho se a categoria escolhida não tiver implantação para um dos seus locais de destino.
Teste a seco antes de ativar o fluxo de trabalho
with: dryRun: true failOnError: false A ação ainda emite resultados resumidos e um resumo de passos, mas nenhum arquivo é escrito. Combine com failOnError: false para destacar cada problema como um aviso enquanto você itera.