每次运行后开启拉取请求
- 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:每个包的作用域转换
with: sourceLocale: en include: | apps/web/**/*.en.resx packages/shared/**/*.en.json exclude: | **/dist/** **/__tests__/**品牌名称和产品术语词汇表
把一个.github/resource-translator.yml放进仓库:
glossary: Acme: Contoso Octocat: Octocat ".NET": ".NET" "C++": "C++"词汇表术语是应用在翻译之后,所以机器翻译输出即使模型用同义词替换了你偏好的品牌,也能保留它。
定制翻译器类别(行业/领域)
with: sourceLocale: en subscriptionKey: ${{ secrets.TRANSLATOR_KEY }} endpoint: ${{ secrets.TRANSLATOR_ENDPOINT }} categoryId: 1234abcd-5678-90ef-... 用一个能体现你行业词汇和语气(法律、医疗、市场营销、内部工程等)的语料库训练一个Azure Custom Translator类别,并通过categoryId通过识别。这是Azure最强的音色杠杆。
音色控制 + 严格回退
# .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 将自定义翻译器categoryId与profanityAction和allowFallback: false结合,以确保语音一致性,如果所选类别没有针对目标区域的部署,工作流程将失败。
在开启工作流程前先做一次试运行
with: dryRun: true failOnError: false 动作仍然会输出摘要和步骤摘要,但不会写入文件。结合 failOnError: false,在迭代时将每个问题都作为警告。