각 실행 후에 풀 리퀘스트를 열어
- 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를 통해 ID를 통과하세요. 이것이 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와 결합해 반복 과정에서 모든 문제를 경고로 드러내세요.